我正在爲我不允許修改的其他人的代碼編寫單元測試。如何在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)這樣的專業庫來截取並重寫將其重定向到的方法你的嘲笑。 –
恐怕只有集成測試纔是真正的選擇,如果您無法觸摸代碼。 –