2010-06-17 117 views
1

我一直在试图找出这一个,我如何测试一个私有方法与我正在测试的类中的rhino mocks调用。所以我的课堂会是这样的。Rhino Mocks验证私有方法是从公共方法调用

Public class Foo 
{ 
    public bool DoSomething() 
    { 
     if(somevalue) 
     { 
      //DoSomething; 
     } 
     else 
     { 
      ReportFailure("Failure"); 
     } 
    } 

    private void ReportFailure(string message) 
    { 
     //DoSomeStuff; 
    } 
} 

所以我的单元测试是在Foo类和方法DoSomething的()我要检查并确保一定的消息传递给ReportFailure如果someValue中是假的,用犀牛嘲笑。

回答

2

可能有办法做到这一点,但在大多数情况下,你不想这样做。您的单元测试不应该依赖于隐藏的实现或代码。当你测试他们的时候,把你的班级当作黑匣子,你只能访问改变输入和测试输出。

如果您正在测试私有方法执行,您很可能会潜入太多的实现某个给定的类,并且使您很难在不破坏测试的情况下改变您的实现。

+0

同意,你应该通过公共接口设计你的类的可测性。如果您无法访问需要验证的内部状态,则需要更强大的公共接口。 – darthtrevino 2010-06-17 02:33:49

+0

我完全同意黑盒原理,但是我知道我的一些测试证实我正在测试的类在方法调用后已在内部正确更新。 – Flynn1179 2010-06-24 13:28:07

0

我同意mjd79的答案,但如果你娶了验证ReportFailure叫,那么你可以在方法的保护级别更改为Internal的想法,并设置您的组装InternalsVisibleTo属性,以便允许你的单元测试访问它。

更好的方法可能是模拟ReportFailure访问的任何资源,并验证该模拟中的某些公共方法是否被调用。

相关问题