我有一个应该返回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.
}
在谷歌上找不到任何告诉你如何测试它的东西。 你可以看到我可以为它设置但不能断言。
我错过了明显的事吗?非常感谢。
答案 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类上执行断言。验证步骤确保您的测试类根据您建立的期望调用模拟对象上的方法。