2016-05-10 2 views
0

я следующий кодДалее проверьте результат с помощью MOQ

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; 
     }    

и следующим испытанием блока.

[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? 
    } 

Тестирование модуля работает. Как я могу изменить тест, чтобы убедиться, что зарегистрированное исключение имеет 2 свойства Data? Изменив код на следующий, вы получите сообщение об ошибке «Невозможно разрешить свойство символа».

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

enter image description here

+0

Вы не можете сделать это с помощью '' It.IsAny , вы должны использовать '' It.Is

+0

Спасибо @ AD.Net. Это работает. Хотел бы я отметить комментарий как правильный ответ. –

+1

Я не добавил в качестве ответа, потому что ответ делает то же самое с синтаксисом 'It.Is <>' –

ответ

2

Изменить проверка на что-то вроде:

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

Я пробовал что-то подобное, но получаю ошибку «не могу разрешить символьные данные». –

+0

Я не знаю, что такое API TraceException. Однако ошибка является строковой, потому что вы используете «Данные» в своем коде. – Pellared

+0

Я изменил вопрос выше, чтобы использовать исключение вместо TraceException. Данные являются свойством класса Exception: https://msdn.microsoft.com/en-us/library/system.exception.data(v=vs.110).aspx –

Смежные вопросы