我發現如果從類繼承它,測試類會更容易。 考慮這個seudo例如:Unittest通過Dispose繼承目標(SUT)
public class Bizz
{
public void Do()
{
var obj = ExtenOutOfTest();
someList.Add(obj);
}
protected List<ISomeObejct> someList = new ISomeObejct<ISomeObejct>();
protected virtual ISomeObejct ExtenOutOfTest()
{
//return real obejct
}
}
和測試是這樣的:
[TestClass]
public class BizzTest : Bizz
{
private ISomeObejct _fakedObj;
protected override ISomeObejct ExtenOutOfTest()
{
return _fakedObj;
}
[TestMethod]
public void Test_Do_Add()
{
_fakedObj = new Fake<ISomeObejct>().FakedObject;
Assert.IsFalse(someList.Any());
base.Do(); //<-- target
Assert.IsTrue(someList.Any());
}
}
現在我有我的測試,和我BIZZ對象不到風度隔離能力暴露任何其他除了這些方法之外的方法應該是。
這種單元測試不好的做法嗎?
當我修改我的Bizz
類實現IDisposable我無法再運行我的測試:
~Bizz(){Dispose(false);}
public void Dispose()
{
Dispose(true);
}
private void Dispose(bool disposing)
{
if(!disposing) return;
//do cleanup resources
}
它不會顯示我失敗之前甚至開始: 單元測試適配器拋出異常:曖昧找到匹配。
我試圖讓Dispose
虛擬,然後在測試類中覆蓋它 - 但它不起作用。
任何幫助表示讚賞。
解釋它 - 謝謝 – 2014-07-12 06:30:53