如何声明/验证Moq保护方法?

问题描述:

我应该使用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. 
} 

无法找到谷歌什么,告诉你如何对它进行测试。你可以看到我可以为它做一个设置,但不能断言。

我是否缺少明显的?非常感谢。

你不想在模拟上测试一个方法。您想要在实际类的实例上测试该方法。上课的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()); 

} 

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

+0

感谢您的回复。 我想我的模拟了object.CanTestPrivateMethod返回特定的值。 所以,如果我硬编码“返回true”在我的私人方法。 我仍然可以断言吗? 在我看来,我不应该测试私人方法,但我的同事坚持这一个。 所以我只是想弄清楚如何使用起订量来做到这一点。 – user9969 2010-02-01 19:04:39

+1

你错过了我的观点。不要模拟被测物体。只嘲笑它的依赖关系。创建一个实际的实例,设置条件以便私有方法返回一个特定的值,然后使用访问器检查该方法是否实际返回该值。唯一需要mock的是如果实例有一些依赖关系,你可以在你的私有方法中使用它们。 – tvanfosson 2010-02-01 19:32:13

+0

感谢您的时间和答复。我现在明白了。 – user9969 2010-02-01 21:48:13