2017-03-22 40 views
-2

需要在一些配置文件键的帮助下,在相同的测试类中执行Moq单元测试和实际单元测试。 是否可以使用基于配置值分配的相同对象执行此操作?实现相同类别的Moq单元测试和实际单元测试方法

意思是如果配置文件键是“Moq”,那么Moq单元测试将运行,如果不是,实际单元测试将以相同的测试类和相同的方法运行。

+0

我不清楚你在问什么。我从来没有听说过Moq单元测试和“实际”单元测试之间的区别,你能详细说明一下吗? –

+0

你应该更具体。我真的不知道你在说什么。 –

+0

对不起。意思是有两种方法可以实现单元测试 1.使用某些框架,我正在使用的Moq来嘲笑结果。 2.实际单元测试调用,它将直接调用数据库来获取实际数据。 我想实现两个相同的测试方法,可以使用配置值进行管理。 意思是如果我设置1,那么Moq单元测试应该发生并且 如果我设置2实际单元测试应该发生。 – ashwinrajagopal

回答

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进行实际单元测试,另一个用真正的实现进行集成测试。