为什么xUnit.net的FactAttribute AttributeUsage.Inheritable?



以前没有编写过单元测试框架,在我看来,如果程序集中的某些类型都需要进行类似的测试,那么可继承的Fact属性将使编写抽象测试类或测试接口变得更容易。

事实不可继承是否有设计原因?我认为其他使用属性来识别测试方法的测试框架(NUnit、MSTest、MbUnit等)也有类似的设计。我错过了什么?

以下是xunit的FactAttribute(版本1.9.1.1600)的开始:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class FactAttribute : Attribute
{

我试图理解为什么它看起来不像下面这样:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class FactAttribute : Attribute
{ 

FactAttribute是可继承的。

看看这篇文章:http://iridescence.no/post/Extending-xUnit-with-a-Custom-ObservationAttribute-for-BDD-Style-Testing.aspx

我觉得有时候它真的很有用。

我经常在测试中使用模板模式(这似乎是你试图实现的),它在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
    }
}

Verify执行两次——一次在实例Test1上,另一次在Test2的实例上。

希望这能有所帮助。

我从未听说过一个属性是可继承的,就像类一样。使用公共测试方法编写基类并将[Fut]特性应用于派生类中的方法应该不会有任何问题。

相关内容

  • 没有找到相关文章

最新更新