我有一个关于单元测试的问题.假设我有几个继承父类行为的类.我不想为这种行为测试所有子类.相反,我会测试父类.但是,我还应该提供一个测试,证明子类中的行为是可用的.你认为像Assert.IsTrue(new ChildClass()是ParentClass)之类的东西有意义吗?
如果您使用的是最先进的单元测试框架,我不理解该声明
我不想为这种行为测试所有子类.
单元测试(笔试对父类的一个实例)应该可以正常工作,如果你把他们一个子类的实例,提供你的子类并没有覆盖父母的行为的某些方面在上打破了合同的方式继承的方法.这正是你需要测试的,不是吗?
如果您担心运行测试所需的时间,我会仔细检查以确保您的测试已经过分区,以便您可以根据您正在进行的工作选择性地运行测试(但仍然运行定期完整的投资组合以捕获意外的依赖关系.)
我认为编写继承有效的测试是浪费时间.如果您尝试使用它们,编译器将检查基类方法是否可用,假设您没有使用intellisense.我可能会测试一个子类中的行为,然后只测试修改行为的每个子类(或行为所依赖的某些状态).
让你的测试继承自基类测试,这非常类似于此.
public class MyBaseClass { public virtual void DoStuff() { } public virtual void DoOtherStuff() { } } public class MySubClass : MyBaseClass { public override void DoOtherStuff() { // different to to base } } public abstract class TestOfBaseClass { protected abstract MyBaseClass classUnderTest { get; } [TestMethod] public void TestDoStuff() { classUnderTest.DoStuff(); Assert.StuffWasDone(); } } [TestClass] public class WhenSubclassDoesStuff : TestOfBaseClass { protected override MyBaseClass classUnderTest { get { return new MySubClass(); } } [TestMethod] public void ShoudDoOtherStuff() { classUnderTest.DoOtherStuff(); Assert.OtherStuffDone(); } }
大多数流行的测试框架将在运行子类测试时在基本测试中运行测试方法.
或者看看像https://github.com/gregoryyoung/grensesnitt这样的东西
您不希望测试对象的类型,除非它来自无类型的工厂方法.否则,您正在针对C#编译器编写单元测试,而这不是您想要做的.