在不执行方法中的代码的情况下,如何断言方法已被调用



想象一下,我们有下面的代码

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}
 }

我想断言,如果methodone在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();

但它也试图在方法一中运行这些东西,我不想让我的测试进行数据库连接,我只需要确保我的条件有效,它是否被调用。

您将关注点、业务逻辑和数据访问混合在一个类中。你需要考虑单一责任原则和关注点分离。

您的public void Condition(x,y)可能位于业务逻辑层中,而methodOne()methodTwo()则位于Data Access Layer

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

这样,您就可以像现在这样检查Condition是否被调用,而不会产生任何副作用,比如写入数据库。当您遇到这样的情况时,它可以帮助您将代码分解为更好的体系结构,并最终引导您研究测试驱动开发。

相关内容

  • 没有找到相关文章

最新更新