2017-02-11 4 views
2

xUnitによって作成されたITestOutputHelperをAutoFixtureコンテキストで使用できるようにすることは可能ですか?xUnitによって作成されたITestOutputHelperをAutoFixtureコンテキストで使用できるようにすることは可能ですか?

私の統合テストでは、いくつかのルーチン操作のヘルパーメソッドを含むBuilderクラスを使用します。クラス作成の複雑さを隠すために、私はカスタムAutoDataAttributeを使用します。したがって、私のテストはAutoFixtureからテストメソッドのパラメータとしてオブジェクトを生成しています。

ここで、いくつかのロギング機能をBuilderに追加することにしました。カスタムAutoDataAttributeからBuilderのコンストラクタにITestOutputHelperを渡す方法がわかりません。

using Ploeh.AutoFixture; 
using Ploeh.AutoFixture.AutoNSubstitute; 
using Ploeh.AutoFixture.Xunit2; 
using Xunit; 
using Xunit.Abstractions; 

namespace XunitAutoFixtItestOutput 
{ 
    public class Class1Tests 
    { 
     private readonly ITestOutputHelper _output; 

     public Class1Tests(ITestOutputHelper output) 
     { 
      _output = output; 
     } 

     [Theory, DefaultAutoData] 
     public void UnitOfWork_StateUnderTest_ExpectedBehavior(Builder builder) 
     { 
     } 
    } 

    public class Builder 
    { 
     private readonly ITestOutputHelper _outputHelper; 

     public Builder(ITestOutputHelper outputHelper) 
     { 
      _outputHelper = outputHelper; 
     } 

     public void DoSomething() 
     { 
      _outputHelper.WriteLine("Something happened"); 
     } 
    } 

    public class DefaultAutoData : AutoDataAttribute 
    { 
     public DefaultAutoData() : base(new Fixture().Customize(new DefaultCustomization())) 
     { 
      this.Fixture.Customize<Builder>(f => f.FromFactory(new Builder(??Where to get it from??))); 
     } 
    } 

    public class DefaultCustomization : CompositeCustomization 
    { 
     public DefaultCustomization() : base(new AutoConfiguredNSubstituteCustomization()) 
     { 
     } 
    } 
} 
+2

xUnit.netは、テストクラスの寿命を制御するが、同様にこれはテストクラスのコンストラクタに渡される 'ITestOutputHelper'インスタンスを生成するためです。私はxUnit.netのAPIができることを完全には理解していませんが、 'DataAttribute.GetData'が呼び出されたときに注入された' ITestOutputHelper'を取得できるようにする拡張ポイントを提供しない限り、私は思いませんこれは可能です... –

+0

ありがとう、DataAttributeを見てみましょう。 –

答えて

1

マークシーマンコメントに予見したように、それは現在のバージョン(V2.1)に支持され、目に見える拡張点がありませんていません。したがって、future versionsに追加される可能性があります。

犠牲(xUnitの拡張少なくともまで) AutoData属性と試験コンストラクタで fixtureを設定する提案がある

public class Class1Tests 
{ 
    private readonly Fixture fixture; 

    public Class1Tests(ITestOutputHelper output) 
    { 
    this.fixture = new Fixture(); 
    this.fixture.Inject(output); 
    } 

    [Fact] 
    public void UnitOfWork_StateUnderTest_ExpectedBehavior() 
    { 
    var builder = this.fixture.Create<Builder>(); 
    builder.DoSomething(); 
    } 
} 
関連する問題