如何断言/验证Moq保护方法?

时间:2010-02-01 18:38:04

标签: c# .net unit-testing mocking moq

我有一个应该返回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.
}

在谷歌上找不到任何告诉你如何测试它的东西。 你可以看到我可以为它设置但不能断言。

我错过了明显的事吗?非常感谢。

1 个答案:

答案 0 :(得分:3)

您不想在模拟上测试方法。您想要在实际类的实例上测试该方法。在类上test a private method的方法是使用访问器。请注意,VS会自动为您提供这些,或者您可以使用反射“自己动手”。对于内部方法,还可以在AssemblyInfo.cs文件中将InternalsVisibleTo设置为测试项目。

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

   Assert.IsTrue( accessor.CanTestPrivateMethod() );

}

当您模拟对象时,意图是该对象被用作实际测试类的依赖项。因此,能够设置模拟对象以返回特定值就足够了。您在使用依赖项的类上执行断言,而不是在mock类上执行断言。验证步骤确保您的测试类根据您建立的期望调用模拟对象上的方法。