鑑於我在一個名爲GBase的程序集中有一個類,它帶有一個構造函數,它帶有兩個參數和一個GBase的子類(稱爲GDerived),它具有相同的參數,我是否將這些分開以便我可以對子類進行單元測試?如何爲參數化基類的子類編寫單元測試
在OtherAssembly:
public class GBase
{
public GBase(ParamType1 param1, ParamType2 param2)
{
...
}
protected ParamType1 SomeProperty { get; set; }
// other stuff
}
在ThisAssembly:
public class GDerived : GBase
{
public GDerived(ParamType1 param1, ParamType2 param2)
:base(param1, param2)
{
// new code
SomeProperty = newCalculatedValue;
// other stuff
}
// other stuff
}
原始GBASE類傳統代碼,由於是程序的總體結構 - 改變結構是不可能的由於代碼庫的大小(10k行以上) - 直到最近,它們都沒有爲它編寫單元測試。
所以,現在我想寫一個測試(使用NUnit)的子類構造函數來驗證正確的屬性填充正確的值。請注意,測試類與測試類位於同一個項目中。
[TestFixture]
public class GDerivedTests
{
[Test]
public void GDerivedConstructor_ValidParams_PropertiesSetCorrectly()
{
var newGDerived = new GDerived(parameter1, parameter2);
Assert.That(SomeProperty == parameter1;
}
}
這是我們不得不面對一個非常粗糙的代表,並有比我們需要測試的基類設置屬性的其他案件。我甚至不知道從哪裏開始。我有Michael Feathers撰寫的「使用遺留代碼有效地工作」一書,但它似乎沒有涵蓋這種普遍的「設計模式」,在我們正在處理的代碼中廣泛使用。是因爲它非常簡單,任何眨眼的idjyot都應該知道如何處理它,還是因爲這是一種罕見的情況?不知何故,我不認爲它是,但我可能是錯的...
我想到的一種可能的方法是提取基類的接口和模擬基類的構造函數 - 但我不知道關於如何做到這一點的細節。請注意,我們都是團隊單元測試的相對新手,沒有經驗可供借鑑。不編碼新手,只是單元測試新手。
TIA, 戴夫
即使作爲一個相對的新手,我也熟悉這個方法和框架。 :)我們使用NUnit和Moq開始。我們將測試添加到添加到現有應用程序的新代碼中,直到最近才從未見過單元測試。 – DaveN59
感謝您的出色反應。事實證明,我們還有其他問題被Resharper中的「bug」所掩蓋。有一個Resharper選項(正在測試Shadow-copy程序集)可以防止真正的錯誤報告。禁用該功能後,真正的錯誤是GBase類中其他程序集中其他類的依賴關係。我們有我們的工作爲我們... – DaveN59
至於旁註,這兩種方法都有完全有效的論點。我們仍在辯論最佳方法。 – DaveN59