为什么我可以从事实中获得,而特质是密封的?

时间:2017-05-28 20:17:19

标签: c# inheritance xunit

我正在考虑创建一个派生自Xunit.Trait的属性,我可以将其归因于我的事实。这个想法是提供的类型的名称被设置为特征值。这些方面的东西:

[Tests(typeof(Foo.Bar))] // would be equivalent to [Trait("Type", "Foo.Bar"]
[Fact]
public void TestsFooBarConstructor()
{
  var x = new Foo.Bar();
  // ...
}

知道Xunit.Fact属性可以进一步专门化,我希望它与Trait属性相同并创建以下属性类

public class TestsAttribute : TraitAttribute
{
  public TestsAttribute(Type t)
    : base("Type", t.FullName)
  {
  }
}

直到我发现Trait已被封存。这个设计有原因吗?

1 个答案:

答案 0 :(得分:2)

通过查看测试而不必运行它来确定代码的意图意味着用户可以在调用编译器之前更早地理解测试意图。

许多新属性是密封的(而不是使用继承),因为他们希望能够通过自动化工具支持环境中的测试发现(代码甚至可能无法编译,所以它&#39 ; s使用抽象语法树完成,如Resharper,CodeRush,Roslyn等......

查看xunit contributors here

的详细信息