2016-05-10 11 views
0

Ich habe den folgenden CodeWeitere überprüfen Ergebnis MOQ mit

public bool IsUnitAvailable() 
     { 
      this.isUnitAvailable = false; 
       if(isUnitAvailable == false) 
       { 
        var exception = new Exception("Unit Unavailable"); 
        exception.Data.Add("Quotation","1234567"); 
        exception.Data.Add("propertyDate", "2016-10-10");      this.GetElmahExtensionWrapper().LogToElmah(exception); 
       } 
      }  
      return this.isUnitAvailable; 
     }    

und der folgenden Unit-Test.

[TestMethod]  
    public void WhenUnitIsNotAvailableExceptionShouldBeLoggedInElmahTest() 
    { 
     //Arrange 
     var iPricingServiceMock = new Mock<IPricingService>(MockBehavior.Strict); 
     iPricingServiceMock.Setup(
      counter => counter.IsUnitAvailableOn(It.IsAny<Unit>(),It.IsAny<DateTime>())).Returns(false); 

     var mockElmahExtensionWrapper = TestHelper.mk.GetMock<IElmahExtensionWrapper>(); 

     // act 
     var quotation = new Quotation(); 
     quotation.SetElmahExtensionWrapper(mockElmahExtensionWrapper.Object); 
     quotation.IsUnitAvailable(); 

     //assert 
     mockElmahExtensionWrapper.Verify(counter => counter.LogToElmah(It.IsAny<Exception>()), Times.Exactly(1)); 
//change the test to verify that the exception that was logged had 2 Data properties? 
    } 

Der Komponententest funktioniert. Wie kann ich den Test ändern, um zu überprüfen, ob die protokollierte Ausnahme 2 Data-Eigenschaften aufweist? Wenn Sie den folgenden Code ändern, wird der Fehler "Symboldateneigenschaft kann nicht aufgelöst werden" ausgegeben.

mockElmahExtensionWrapper.Verify 
       (
        counter => counter.LogToElmah 
        (
         It.IsAny<Exception>(ex=>ex.Data.Count == 2) 
        ), 
        Times.Exactly(1) 
       ); 

enter image description here

+0

Sie können nicht tun, mit 'It.IsAny ', den Sie verwenden müssen '' It.Is

+0

Vielen Dank @ AD.Net. Das funktioniert. Ich wünschte, ich könnte den Kommentar als die richtige Antwort markieren. –

+1

Ich habe nicht als Antwort hinzugefügt, weil die Antwort das gleiche mit 'It.Is <>' Syntax tut –

Antwort

2

Ändern Sie die Überprüfung auf so etwas wie:

mockElmahExtensionWrapper.Verify(counter => counter.LogToElmah(It.Is<TraceException>(ex => ex.Data["Quotation"] == "1234567" && ex.Data["propertyDate"] == "2016-10-10"), Times.Exactly(1)); 
+0

Ich hatte etwas ähnliches versucht, aber ich bekomme einen Fehler "kann Symbol Daten nicht auflösen". –

+0

Ich weiß nicht, was ist die API von TraceException. Der Fehler ist jedoch string, weil Sie in Ihrem Code "Daten" verwenden. – Pellared

+0

Ich habe die obige Frage geändert, um eine Exception anstelle einer TraceException zu verwenden. Data ist eine Eigenschaft für die Exception-Klasse: https://msdn.microsoft.com/en-us/library/system.exception.data(v=vs.110).aspx –