【问题标题】:Rhino Mock: Mocking private method calls c#Rhino Mock:模拟私有方法调用 c#
【发布时间】:2012-11-26 14:52:56
【问题描述】:

可以模拟出私有方法调用。

例子

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

        AnotherPrivateMethodCallIDontNotWantToMockOut();
    }

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

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

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

在Rhino Mock中可以做到这一点,这是正确的想法吗?

补充:我正在尝试测试 ViewModel 类中的代码。

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

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

【问题讨论】:

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


    【解决方案1】:

    Mocking 用于从被测对象到 依赖项 - 在您想要模拟您正在测试的同一对象中的部分代码时,有些东西是'没错。

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

    【讨论】:

    • @Jon Skeet,是的,我认为你是正确的。我在上面添加了更多细节,希望能帮助解释我的想法。我担心的不是代码,而是我应该如何思考如何对这种类型的代码进行单元测试。
    • @user101010101:说实话,还不是很清楚。您应该通过公共方法或潜在的内部方法测试私有方法。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多