簡體   English   中英

使用靜態類/方法依賴項測試類

[英]Testing a Class with a Static Class/method dependency

所以我有一個看起來像這樣的課程:

public class MyClassToTest()
{
    MyStaticClass.DoSomethingThatIsBadForUnitTesting();
}

和一個看起來像這樣的靜態類:

public static class MyStaticClass()
{
    public static void DoSomethingThatIsBadForUnitTesting()
    {
        // Hit a database
        // call services
        // write to a file
        // Other things bad for unit testing
    }
}

(顯然這是一個愚蠢的例子)

所以,我知道第二類在單元測試方面注定要失敗,但有沒有辦法解開MyClassToTest類,以便我可以測試它(沒有實例化MyStaticClass )。 基本上,我希望它忽略這個電話。

注意:遺憾的是這是一個Compact Framework項目,因此不能使用Moles和Typemock Isolator等工具:(。

定義一個與DoSomethingThatIsBadForUnitTesting完全相同的接口,例如:

public interface IAction {
    public void DoSomething();
}

(顯然,在實際代碼中,你會選擇更好的名字。)

然后,您可以為類編寫一個簡單的包裝器,以便在生產代碼中使用:

public class Action : IAction {
    public void DoSomething() {
        MyStaticClass.DoSomethingThatIsBadForUnitTesting();
    }
}

MyClassToTest ,您通過其構造函數傳遞IAction的實例,並在該實例上調用該方法而不是靜態類。 在生產代碼中,您傳入具體的類Action因此代碼的行為與以前一樣。 在單元測試中,您傳入一個實現IAction的模擬對象,使用模擬框架或滾動您自己的模擬。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM