我一直在尝试解决这个问题,我如何测试在我正在测试的类中使用rhino mocks调用私有方法。所以我的班级会是这样的。
Public class Foo
{
public bool DoSomething()
{
if(somevalue)
{
//DoSomething;
}
else
{
ReportFailure("Failure");
}
}
private void ReportFailure(string message)
{
//DoSomeStuff;
}
}
所以我的单元测试是在类Foo和方法DoSomething()我想检查并确保如果somevalue为false,使用rhino mocks将某个消息传递给ReportFailure。
答案 0 :(得分:2)
可能有一种方法可以做到这一点,但在大多数情况下你不想这样做。您的单元测试不应该依赖于隐藏的实现或代码。在测试时将您的类视为黑盒子,您只能访问更改输入和测试输出。
如果您正在测试私有方法执行,那么您很可能会深入了解某个类的实现,并且您很难在不破坏测试的情况下更改您的实现。
答案 1 :(得分:0)
我同意mjd79的回答,但是如果您与验证ReportFailure被调用的想法结合了,那么您可以将方法的保护级别更改为Internal
,并设置InternalsVisibleTo
属性在您的程序集上,以便它允许您的单元测试访问它。
更好的方法可能是模拟ReportFailure访问的任何资源,并验证是否调用了该模拟的某些公共方法。