Как я могу утверждать / проверять защищенный метод Moq? - PullRequest
6 голосов
/ 01 февраля 2010

У меня есть закрытый метод, который должен возвращать true. Я использую Nunit и MOQ. Итак, у меня есть следующее:

[TestFixture] 
public class CustomerTestFixture 
{ 
    var customerMock=new Mock<ICustomer>() 
    customerMock.Protected().Setup<bool>("CanTestPrivateMethod").Returns(true); 

    // How do I assert it now since I cannot do 
    customerMock.Verify //Verify does not exists.
}

Не удалось найти в Google ничего, что говорило бы о том, как это проверить. как вы видите, я могу настроить его, но не могу утверждать.

Я упускаю очевидное? Большое спасибо.

1 Ответ

3 голосов
/ 01 февраля 2010

Вы не хотите тестировать метод на макете.Вы хотите проверить метод на экземпляре фактического класса. протестировать закрытый метод в классе - это использовать метод доступа.Обратите внимание, что VS предоставит их вам автоматически, или вы можете «свернуть свое», используя отражение.Для внутреннего метода вы также можете установить InternalsVisibleTo для своего тестового проекта в файле AssemblyInfo.cs.

[TextFixture]
public class CustomerTestFixture
{
   var customer = new Customer();
   var accessor = new Customer_Accessor( new PrivateObject( customer ) );

   Assert.IsTrue( accessor.CanTestPrivateMethod() );

}

Когда вы макете объект, предполагается, что этот объект используется в качестве зависимости дляфактический класс в тесте.Поэтому достаточно иметь возможность настроить фиктивный объект для возврата определенных значений.Вы делаете свои утверждения для класса, который использует зависимость, а не для ложного класса.Этап проверки гарантирует, что тестируемый класс вызвал методы для фиктивных объектов в соответствии с установленными вами ожиданиями.

...