我目前正在編寫一個類的單元測試,該類根據大XML文件中找到的參數來設置值的格式。可以模擬我正在測試的課程的某些部分嗎?
我正在測試的類在其構造函數中接收另一個類,該類提供瞭解析和讀取xml文件的功能。我認爲給測試類提供一個xml閱讀類的具體實例是不好的風格,因爲我相信這樣做會導致在每次我想要測試xml閱讀類時 - 實際上 - 測試主類的格式化函數。如果在xml閱讀類中出現問題,格式化類中的所有單元測試都會失敗,這顯然不是格式類的錯誤。
那麼我該如何繼續?
很明顯,我只是創建一個XML讀取類的模擬並將其作爲參數傳遞給構造函數。但是,格式化類將使用此實例來創建約5個其他類的私有實例。因爲我不知道這些類想做什麼(老實說這些測試不應該在意),我想嘲笑我正在測試的這個類的這些私有字段。
這甚至可以嗎?我將如何使用Moq做到這一點?
CNC中
請看下面的例子:
public class FormatterCore : IFormatterInterfaceIWantToTest
{
public FormatterCore(IConfigService service)
{
this.something = new SomeStuffA(service);
this.somethingThatINeed = new SomethingUserfull(service);
this.somethingElse = new SomeOtherStuff(service);
this.somethingTotallyDifferent = new SomeReallyUselessStuff(service);
//...
}
public T Format<T>(object input, string id)
{
// implementation of the interface I want to test
}
}
在我的例子我想測試接口的方法Format<T>()
。要創建Formatter類的實例,我需要傳遞一個IConfigService實現的實例(這是昂貴且麻煩的,因爲它需要不同的xml文件並需要一段時間)。我的問題在於,我不想爲每個單元測試創建一個configService的實例,因爲這意味着我會在FormatterCore單元中的每個測試中測試configService本身。
*然而,格式化類將使用此實例來創建約5個其他類的私有實例。*很高興看到這樣的例子。 – sloth
@DominicKexel我看到了,我編輯了我最初的問題 – buddybubble