【问题标题】:RhinoMocks: how to test if method was called when using PartialMockRhinoMocks:如何测试使用 PartialMock 时是否调用了方法
【发布时间】:2013-02-16 00:32:52
【问题描述】:

我有一个类似这样的类

public class MyClass
{
  public virtual string MethodA(Command cmd)
  { //some code here}
  public void MethodB(SomeType obj)
  { 
     // do some work
     MethodA(command);
   }

}

我将 MyClass 嘲笑为 PartialMock (mocks.PartialMock<MyClass>),并为 MethodA 设置期望

var cmd = new Command(); 
//set the cmd to expected state
Expect.Call(MyClass.MethodA(cmd)).Repeat.Once();

问题是 MethodB 调用 MethodA 的实际实现而不是模拟它。我一定是做错了什么(对 RhinoMocks 不是很有经验)。如何强制它模拟 MetdhodA?

下面是实际代码:

  var cmd = new SetBaseProductCoInsuranceCommand();
            cmd.BaseProduct = planBaseProduct;
            var insuredType = mocks.DynamicMock<InsuredType>();
            Expect.Call(insuredType.Code).Return(InsuredTypeCode.AllInsureds);
            cmd.Values.Add(new SetBaseProductCoInsuranceCommand.CoInsuranceValues()
                               {
                                   CoInsurancePercent = 0,
                                   InsuredType = insuredType,
                                   PolicySupplierType = ppProvider
                               });

            Expect.Call(() => service.SetCoInsurancePercentages(cmd)).Repeat.Once();

            mocks.ReplayAll();

            //act
            service.DefaultCoInsurancesFor(planBaseProduct);

            //assert
            service.AssertWasCalled(x => x.SetCoInsurancePercentages(cmd),x=>x.Repeat.Once());

【问题讨论】:

    标签: c# rhino-mocks


    【解决方案1】:

    我已尝试重现此问题,并且似乎工作正常,我的测试代码(如下)和您的有什么不同?

    public class MyClass
    {
        public virtual string MethodA(object cmd)
        {
            return "implementation";
        }
    
        public string MethodB(object obj)
        {
            // do some work
            return MethodA(obj);
        }
    
    }
    
    [TestFixture]
    public class MyClassTests
    {
        [Test]
        public void MockTest()
        {
            var myClassMock = MockRepository.GenerateMock<MyClass>();
            myClassMock.Expect(x => x.MethodA("x")).Return("mock");
            Assert.AreEqual("mock", myClassMock.MethodB("x"));
            myClassMock.VerifyAllExpectations();
        }
    }
    

    【讨论】:

      【解决方案2】:

      这里的问题似乎是,虽然在您的 cmets 中您说的是 PartialMock,但在您的代码示例中您使用的是 DynamicMock。我相信这是您问题的根源,因为它们的行为不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        相关资源
        最近更新 更多