2017-02-11 23 views
2

Возможно ли, что ITestOutputHelper, созданный xUnit, будет доступен в контексте AutoFixture?Возможно ли, что ITestOutputHelper, созданный xUnit, будет доступен в контексте AutoFixture?

В моих тестах интеграции я использую класс Builder, который содержит вспомогательные методы для некоторых рутинных операций. Чтобы скрыть сложность создания класса, я использую собственный атрибут AutoDataAttribute, поэтому мои тесты получают созданный объект как параметр метода теста из AutoFixture.

Теперь я решил добавить некоторые функции ведения журнала в Builder и не могу узнать, как передать ITestOutputHelper в конструктор Builder из пользовательского атрибута AutoDataAttribute.

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', который передается конструктору тестового класса. У меня нет полного представления о том, что API xUnit.net позволяет вам делать, но если он не предоставляет точку расширяемости, которая позволяет вам получить введенный «ITestOutputHelper», когда вызывается «DataAttribute.GetData», я не думаю это возможно ... –

+0

Благодарим за информацию, посмотрим на DataAttribute. –

ответ

1

Как Марк Seemann предвидел в комментариях, это не поддерживается в текущей версии (v2.1) и нет никакой видимой точки расширяемости. Поэтому он может быть добавлен в future versions.

Существует предположение, чтобы жертву устанавливается атрибут AutoData (по крайней мере до тех пор, пока XUnit расширенная) и настроить 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(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^