需要在一些配置文件密钥的帮助下,在同一个测试类中实现Moq单元测试和实际单元测试。 是否可以使用将根据配置值分配的相同对象?
表示配置文件密钥是" Moq"那么Moq单元测试将运行,如果不是,则实际单元测试将在相同的测试类和相同的方法中运行。
答案 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
的实际单元测试,另一个是真实实现的集成测试。