1

我一直在试图弄清楚这一点,我如何测试在我正在测试的类中使用 rhino 模拟调用私有方法。所以我的课会是这样的。

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

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

因此,我的单元测试是在类 Foo 和方法 DoSomething() 上进行的

4

2 回答 2

2

可能有一种方法可以做到这一点,但在大多数情况下,您不想这样做。您的单元测试不应依赖于隐藏的实现或代码。当您测试您的类时,将它们视为黑盒,您只能在其中更改输入和测试输出。

如果您正在测试私有方法的执行,您很可能会在给定类的实现中跳得太深,并且您很难在不破坏测试的情况下更改您的实现。

于 2010-06-17T02:23:31.367 回答
0

我同意 mjd79 的回答,但是如果您同意验证是否调用了 ReportFailure 的想法,那么您可以将方法的保护级别更改为Internal,并InternalsVisibleTo在您的程序集上设置属性,以便它允许您的单元测试访问它.

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

于 2010-06-24T13:24:03.610 回答