Rhino Mock:模拟私有方法调用c#

时间:2012-11-26 14:52:57

标签: c# .net unit-testing rhino-mocks

可以模拟priavte方法调用。

实施例

   Public void StartProcess(string valueFound)
    {
        if(this.value == valuefound)
        {
            MockThisPriavteMethodCall();
        }

        AnotherPrivateMethodCallIDontNotWantToMockOut();
    }

这种情况是我想测试一个私有方法,但我想模仿另一个私有方法的结果。

在上面的例子中,我希望能够模拟方法调用“MockThisPriavteMethodCall()”,但我希望运行第二个“AnotherPrivateMethodCallIDontNotWantToMockOut()”。

我可以使用某种形式的期待吗?

这可以在Rhino Mock中完成,这是正确的想法吗?

另外:我正在尝试测试ViewModel类中的代码。

上面的示例也表明它是少数公共方法之一。这些方法调用许多不同的私有方法。这再次涉及许多私人方法。

我是否应该测试允许代码流经几个分支的某些路径和情况,或者我应该只测试自己的方法?

2 个答案:

答案 0 :(得分:8)

从被测对象到依赖使用模拟 - 在你想要在你正在测试的同一个对象中模拟部分代码的地方,有些东西不是'对。

很难从你的伪代码中说出太多内容,但听起来你可能想要为你想伪造的代码引入新的依赖。如果你能给我们更具体的背景细节,那真的会有所帮助。

答案 1 :(得分:1)

真的没有一种干净的方法可以做到这一点。

您可以通过将方法调用更改为protected并创建一个继承自您的类并以此方式创建期望的可测试类来完成此操作。

据说,Jon Skeet is correct,你可能在这里错误地使用了Mocking。您显然希望从方法返回一个虚拟值,一旦您创建方法protected,您可以按如下方式执行:

myclass.Stub(s => s.MockThisMethodCall()).Return("WhateverValueYouExpect");