我发现如果你继承一个类,测试一个类要容易得多。考虑这个seudo示例:
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
虚拟然后在测试类中覆盖它 - 但它没有用。
任何帮助表示赞赏。