首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么xunit.net的FactAttribute AttributeUsage.Inheritable不是?

为什么xunit.net的FactAttribute AttributeUsage.Inheritable不是?
EN

Stack Overflow用户
提问于 2012-07-19 00:20:39
回答 3查看 1.6K关注 0票数 5

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

是否存在无法继承事实的设计原因?我认为使用属性来标识测试方法的其他测试框架(NUnit、MSTest、MbUnit等)的设计也是类似的。我遗漏了什么?

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

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class FactAttribute : Attribute
{

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

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class FactAttribute : Attribute
{ 
EN

回答 3

Stack Overflow用户

发布于 2012-07-31 20:39:44

FactAttribute是可继承的。

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

我认为它有时真的很有用。

票数 2
EN

Stack Overflow用户

发布于 2012-09-22 06:35:55

我经常在我的测试中使用模板模式(这似乎就是您想要完成的),它在xUnit.net中工作得很好。

代码语言:javascript
复制
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实例上。

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2012-07-19 00:23:41

我从来没有听说过属性是可继承的,就像类一样。不过,使用通用测试方法编写基类并将事实属性应用于派生类中的方法应该没有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11545941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档