我有一個設置提供程序是不可測試的(公司遺留代碼)。我試圖將設置提供程序封裝在Settings Repository中以減少不可測試代碼的數量。因此,而不是有20個方法使用設置提供程序,我們將有1。其餘的實現SettingsRepository接口。存根/模擬2級別在一個類別中下降
雖然後來我做了測試,但通常表明我做了錯誤的測試。
我希望你能幫助找出什麼。
public class SettingsRepository : ISettingsRepository
{
public SettingsRepository() {Settings = Settings.Default; }
public Settings Settings { get; set; }
}
public interface ISettingsRepository
{
Settings Settings { get; set; }
}
我使用unity來注入存儲庫。我從存儲庫中獲取某些內容的方式如下:
_settingsRepository.Settings.SecureCache
所以問題來了。我可以使用nsubstitute模擬/存根SettingsRepository接口,但我需要做的是實際模擬「設置」來設置SecureCache的返回。
有沒有一種方法來「深模擬」在nsubstitute這樣我就可以這樣做:
_settingsRepository.Settings.SecureCache.Returns("www.somepath.com");
目前「設置」爲空和我沒有什麼我可以嘲笑那裏。
我的回退解決方案是直接在SettingsRepository中添加所有設置字段,但我很想避免這種情況,因爲它只會在解決方案的其他地方移動不可測試的代碼。
聽起來像我在這裏的正確軌道。你可以擴展「假實例」部分嗎?設置是一個密封的類。感謝您的幫助 – mfriis
很高興你問:)假實例意味着真實實例的替代版本。例如,我可以從實例繼承並創建自己的假版本。類FakeSettings:設置。然後你可以在單元測試中使用FakeSettings。由於它是密封的,你不能繼承。所以真正的實例會完成這項工作。到底我在代碼中有什麼。 – Spock