[英]Unit testing static utility class
如何在靜態類中單元測試靜態方法?
有這個代碼:
public class AddressConverter {
public static BillingAddress ConvertAddress(ShippingAddress address)
{
var billingAddress = new BillingAddress (); // this is the problem - 3rd party lib
...
}
我正在使用第三方庫,我唯一可以修改的是AddressConverter類。 順便說一句,BillingAddress()是第三方庫,反編譯時顯示:
// decompiled code
public class BillingAddress : IOrderAddress
{
public BillingAddress() : base(SomeSessionContext.Current.Class)
{
...
問題是我無法創建new BillingAddress()
因為它的值取自某些會話變量等。
我該怎么測試呢? 任何解決方法?
如果您無法重構以將BillingAddress注入靜態方法,則可以使用Microsoft Fakes來測試它。
基本上你會為你的第三方DLL添加一個Fakes庫:
在“ 解決方案資源管理器”中 ,打開單元測試項目的引用,並選擇包含要偽造方法的程序集的引用。 ...選擇Add Fakes Assembly 。
然后你應該能夠使用ShimBillingAddress
。 (航空代碼警告,我無法訪問您的第三方lib :-))
using (ShimsContext.Create())
{
// Arrange:
YourThirdPartyLib.Fakes.ShimBillingAddress.SomeMethod = () => { return "some meaningful value"; };
// Instantiate the component under test:
var sut = new AddressConverter();
// Act:
var result = sut.ConvertAddress(someShippingAddress);
// Assert:
}
從MSDN獲取的引用和說明- 使用Microsoft Fakes隔離正在測試的代碼//使用填充程序和MSDN 入門 - 使用填充程序將應用程序與其他程序集隔離以進行單元測試 。
MSDN上有關於fakes生成的填充程序命名約定的信息,因為它並不總是很明顯。
此外, 本答案的后半部分還介紹了如何設置系統dll的假貨。
不要在AddressConverter中創建BillingAddress。 為ConvertAddress使用額外的參數或刪除static關鍵字並使用BillingAddressFactory創建IOrderAddress的新實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.