2017-05-28 12 views
0

Xunit.Traitから派生したアトリビュートを作成することを考えていました。考えられるのは、提供されるタイプの名前が特性値として設定されているということです。これらの線に沿って何か:なぜ私はFactから派生できますが、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属性と、それは同じであると予想され、私はそのTraitを発見するまで

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

を以下の属性クラスを作成しましたシールされる。このデザインの理由はありますか?

答えて

2

実行するのではなくテストを見るだけで、コードの意図を判断できるため、コンパイラが呼び出される前のテストの意図をユーザーが理解できるようになります。

多くの新しい属性は自動化ツール(のコードがでもコンパイルされない場合もあるので、環境からのテスト検出をサポートできるようにするため継承を使用するのではなく封印されているため、抽象構文ツリー)ReSharperの、のCodeRush、ロズリンなどのように...

ツールはそれから派生した属性タイプまたは1つのためになりますhere

+0

のxUnit貢献者による詳細情報を参照してください。実行可能ですが、ツール側でのパフォーマンスの問題は多分でしょうか? – David

+0

@David 'TestsAttribute'は' TraitsAttribute'から派生したものですが、実行せずに基本クラスのコンストラクタに渡す引数を見ることができません。 – hvd

関連する問題