如何在不执行方法内的代码的情况下调用方法?

时间:2013-02-05 10:00:20

标签: c# unit-testing rhino-mocks partial-mocks

想象一下,我们有以下代码

public class test
  {
   public void Condition(x,y)
   {
       if (x == y)
       {
           methodOne();
       }
       else
       {
           methodTwo();
       }
   }
    public void methodOne(){//do some database stuff}
    public void methodTwo(){//do some database stuff}
 }

我想断言如果在x == y时调用methodone但是不希望我的测试执行我的方法中的代码,因为它会做一些数据库的东西......

我正在写这样的东西

 MockRepository mockRepository=new MockRepository();
 var Mock = mockRepository.PartialMock<test>();
 mock.Replay();
 mock.condition(1,1);
 mock.AssertWasCalled(x=>x.methodOne);
 mock.VerifyAllExpectations();

但是它试图在方法1中运行运行的东西,我不希望我的测试做数据库连接,我只需要确保我的条件是有效的,它是否调用。

1 个答案:

答案 0 :(得分:2)

您将关注点,业务逻辑和数据访问混合在一个类中。您需要考虑Single Responsibility PrincipleSeparation of concerns

您的public void Condition(x,y)应该位于业务逻辑层中,methodOne()methodTwo()位于数据访问层中。

应将数据访问层(IoC)注入业务逻辑层,以便将其模拟出来。这样,当您测试Condition方法时,您将传入一个实际上并未连接到数据库的模拟数据访问层。

通过这种方式,您可以像现在一样检查条件是否被调用,没有像写入数据库那样的任何副作用。遇到这种情况时,它可以帮助您将代码分解为更好的架构,最终可以引导您调查Test Driven Development