[英]Replace implementation of a “sealed” class
A
是來自引用的dll的類,因此無法更改。 它有一個方法Foo()
,該方法在我的DoFoo()
方法內部被調用(以A
作為參數)。 我想在不執行Foo()
DoFoo()
情況下測試DoFoo()
,因為它很昂貴並且已經過測試。
在這種情況下,最佳做法是什么?
我對此的想法:
A
周圍創建包裝器類,並將其傳遞到DoFoo()
。 包裝器類區分真實的和假的實現。 dynamic
並通過一個空的DoFoo()
實現傳遞一個偽類。 創建一個包含要公開的方法的接口。
創建一個實現該接口並使用外部程序集的類完成其工作的包裝器類。 您可以創建此接口的其他實現,例如模擬實現。
例如,將帶有構造函數注入的接口注入需要功能的類中。
在測試中,您可以輕松地將使用外部庫的實現替換為模擬實現。
實際上,使用Typemock做到這一點非常容易,您無需使用包裝器或創建接口,只需對其進行模擬即可。 例如:
被測方法:
public string DoFoo(A a)
{
string result = a.Foo();
return result;
}
}
sealed public class A
{
public string Foo()
{
throw new NotImplementedException();
}
}
測試:
[TestMethod,Isolated]
public void TestMethod1()
{
var a = Isolate.Fake.Instance<A>(Members.CallOriginal);
Isolate.WhenCalled(() => a.Foo()).WillReturn("TestWorked");
var classUnderTest = new Class1();
var result = classUnderTest.DoFoo(a);
Assert.AreEqual("TestWorked", result);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.