【发布时间】:2016-09-06 19:50:42
【问题描述】:
我正在为别人的代码编写单元测试,我不允许修改。
说我有:
class BadClass
{
public BadClass()
{
// the service isn't going to be running during testing
// it also has no interface
someFlag = AGloballyStoredService.getSomeFlag();
}
public bool someFlag;
}
使用者:
class AnotherBadClass
{
public AnotherBadClass(BadClass badClass)
{
someFlag = badClass.someFlag;
}
public bool someFlag;
}
说我想要测试:
public void AnotherBadClassConstructorTest()
{
BadClass badClass = new BadClass();
AnotherBadClass anotherBadClass = new AnotherBadClass(badClass);
Assert.IsNotNull(anotherBadClass);
}
我想模拟 BadClass,但它没有接口,如果服务没有运行,它会在其构造函数中失败。
考虑到我无法修改我正在测试的代码,有没有一种简单的方法可以使这项工作正常进行?
如果归根结底,我可以告诉他们,他们要么让我修改现有的代码库,要么接受这个模块低于 10% 的覆盖率。
【问题讨论】:
-
您可能需要使用像 Microsoft Fakes 这样的专用库来拦截并重写方法以将它们重定向到您的模拟。
-
如果你不能接触代码,恐怕只有集成测试才是真正的选择。
标签: c# unit-testing