之前没有编写单元测试框架,在我看来,如果程序集中的某些类型都需要针对类似的事情进行测试,那么可继承的Fact属性会使编写抽象测试类或测试接口变得更容易。
是否存在Fact无法继承的设计理由?我认为使用属性来识别测试方法的其他测试框架(NUnit,MSTest,MbUnit等)也是类似设计的。我错过了什么?
以下是xunit(版本1.9.1.1600)的FactAttribute的开头:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class FactAttribute : Attribute
{
我试图理解为什么它看起来不像以下那样:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class FactAttribute : Attribute
{
答案 0 :(得分:2)
FactAttribute是可继承的。
我认为它有时非常有用。
答案 1 :(得分:1)
我从未听说过属性是可继承的,就像类一样。尽管使用通用测试方法编写基类并将[Fact]属性应用于派生类中的方法,但您应该没有问题。
答案 2 :(得分:1)
我经常在我的测试中使用模板模式(这似乎是你想要完成的),并且它可以与xUnit.net一起使用。
public abstract class TestBase
{
[Fact]
public void Verify()
{
// Step 1
// Step 2
// Overridable step 3
DoStuff();
// Assert
}
protected abstract void DoStuff();
}
public class Test1 : TestBase
{
protected override void DoStuff()
{
// Test1 variation
}
}
public class Test2 : TestBase
{
protected override void DoStuff()
{
// Test2 variation
}
}
验证执行两次 - 一次在实例Test1上,一次在Test2实例上。
希望这有帮助。