【发布时间】:2013-02-21 11:13:09
【问题描述】:
我发现如果你继承一个类,测试它会容易得多。 考虑这个伪例子:
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 设为虚拟,然后在测试类中覆盖它 - 但它不起作用。
感谢任何帮助。
【问题讨论】:
标签: c# unit-testing dispose ambiguous