1

可以模拟一个私有方法调用。

例子

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

        AnotherPrivateMethodCallIDontNotWantToMockOut();
    }

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

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

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

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

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

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

我应该测试允许代码流过几个分支的某些路径和情况,还是应该只测试它们自己的方法?

4

2 回答 2

8

模拟用于从被测对象到依赖项 - 在您想要模拟您正在测试的同一对象中的部分代码时,有些事情是不正确的。

从你的伪代码中很难看出太多,但听起来你可能想要为你想要伪造的代码引入一个新的依赖项。如果你能给我们提供更具体的上下文细节,那真的很有帮助。

于 2012-11-26T14:55:07.210 回答
1

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

您可以通过更改方法调用protected并创建一个从您的类继承的可测试类并以这种方式为其创建期望来做到这一点。

话虽如此,Jon Skeet 是正确的,你可能在这里错误地使用了 Mocking。您显然希望从方法中返回一个虚拟值,并且一旦您创建了该方法protected,您就可以按如下方式执行此操作:

myclass.Stub(s => s.MockThisMethodCall()).Return("WhateverValueYouExpect"); 
于 2012-11-26T14:55:44.207 回答