2010-05-07 80 views
3

时如果方法被称为有CLAS是这样的RhinoMocks:我如何测试使用PartialMock

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()); 

回答

2

我试图重现这个问题,它似乎做工精细,什么是我的测试代码(下)和你之间有什么不同?

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(); 
    } 
} 
0

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