3
我有一個抽象類與抽象方法,它的子類覆蓋此方法必須維護某個合同。 (我做不是意味着.NET的代碼契約,只是代碼契約本身的概念)。該合同的測試代碼可以相同。我如何在保持DRY(不要重複自己)原則的同時在NUnit上測試所有子類的合同?如何使用NUnit測試合同?
(我因爲理由超出了我的控制範圍而與NUnit卡在一起,並且與此問題無關)。
我有一個抽象類與抽象方法,它的子類覆蓋此方法必須維護某個合同。 (我做不是意味着.NET的代碼契約,只是代碼契約本身的概念)。該合同的測試代碼可以相同。我如何在保持DRY(不要重複自己)原則的同時在NUnit上測試所有子類的合同?如何使用NUnit測試合同?
(我因爲理由超出了我的控制範圍而與NUnit卡在一起,並且與此問題無關)。
您可以使用抽象方法創建基本測試類以獲取要測試的實現,然後爲每個派生類創建派生實例以進行測試。
像這樣的事情
[TestClass]
public abstract class TestBase
{
protected abstract IMyInterface GetObjectToTest();
[Test]
public void TestMethod()
{
IMyInterface objectToTest = GetObjectToTest();
//Do your generic test of all implementations of IMyInterface
objectToTest.Setup();
//...
Assert.Equal(objectToTest.Property,100);
//etc
}
}
[TestClass]
public class ConcreteTestClass : TestBase
{
protected override GetObjectToTest()
{
return new ConcreteImplementationOfIMyObject();
}
[Test]
public void TestConcreteImplementationOfIMyObjectSpecificMethod()
{
//test method for stuff which only applies to ConcreteImplementationOfIMyObject types
}
}
使用這種方法,你把你所有的測試,適用於在基類接口的所有實例,然後把它特定於一個特定的實施方案的任何測試測試班。
除了給定派生類的具體實現外,您還想測試什麼? – 2014-10-31 11:15:30
我想測試所有派生類必須實現的合約。如果我爲每個派生類編寫測試,它將是相同的確切代碼,除了類名稱。 – 2014-10-31 11:22:45