我正在为我不允许修改的其他人的代码编写单元测试。如何在C#中不使用接口和虚拟方法来模拟一个类?
说我有:
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](https://msdn.microsoft.com/en-us/library/hh549175.aspx)这样的专业库来截取并重写将其重定向到的方法你的嘲笑。 –
恐怕只有集成测试才是真正的选择,如果您无法触摸代码。 –