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