在同一类中实施Moq单元测试和实际单元测试方法

时间:2017-03-22 13:57:07

标签: c# unit-testing moq

需要在一些配置文件密钥的帮助下,在同一个测试类中实现Moq单元测试和实际单元测试。 是否可以使用将根据配置值分配的相同对象?

表示配置文件密钥是" Moq"那么Moq单元测试将运行,如果不是,则实际单元测试将在相同的测试类和相同的方法中运行。

1 个答案:

答案 0 :(得分:0)

是的,你可以,但可能这不是最好的做法。 例如,

public class MyClass
{
   IDependency _d;
   public MyClass(IDependency d)
   {
      _d = d;
   }
}
public class Dependency : IDependency
{
}

在测试课中,我可以这样:

[TestClass]
public class MyClassTests
{
   MyClass _sut;
   Mock<IDependency> _mockDependency;
   Dependency _realDependency;
   [TestInit]
   public void Init()
   {
      var shouldUseMock = ConfigurationManager.AppSettings["key"];
      if(shouldUseMock)
      {
         _mockDependency = new Mock<IDependency>();
        _sut = new MyClass(_mockDependency.Object) 
      }
      else
      {
        _realDependency = new Dependency();
        _sut = new MyClass(_realDependency);
      }
   }
}

问题在于根据不同的情况设定期望,这使得测试类更难维护。您应该创建两个测试,一个是mock的实际单元测试,另一个是真实实现的集成测试。