Rhino Mocks验证从公共方法调用私有方法

时间:2010-06-17 01:35:26

标签: c# rhino mocking

我一直在尝试解决这个问题,我如何测试在我正在测试的类中使用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。

2 个答案:

答案 0 :(得分:2)

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

如果您正在测试私有方法执行,那么您很可能会深入了解某个类的实现,并且您很难在不破坏测试的情况下更改您的实现。

答案 1 :(得分:0)

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

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