2016-04-01 2 views
4

К сожалению, у меня есть тест Specflow, проходящий локально, но он не работает на VSO Build vNext сервере, и мне действительно нужно увидеть подробные сведения во время тестового прогона, чтобы я мог выяснить, что такое продолжается.Регистрация с помощью Specflow и xUnit 2 (ITestOutputHelper)

Но я изо всех сил, чтобы попытаться придать ITestOutputHelper в Specflow связывания как так

public SomeSteps(ITestOutputHelper outputHelper)

но Specflow жалуется на сообщение

BoDi.ObjectContainerException Interface cannot be resolved: Xunit.Abstractions.ITestOutputHelper (resolution path: ...)

Как на земле может просматривать журнал и просмотреть вывод во время теста Specflow?

+0

Не можете ли вы просто 'Trace.WriteLine' или' Debug.WriteLine' в ваших шагах? –

+0

Описан в ссылке, которую @Avalanchis предоставил в другом комментарии. но, к сожалению, xUnit2 не фиксирует вывод Trace и Debug. Вы должны использовать ITestOutputHelper. [rant on] Я начинаю больше не любить xUnit.net. Даже на github, похоже, только очень мало участников, и не так много коммитов и ответов, чтобы ответить на проблемы, о которых сообщалось. [rant off] – softbear

ответ

1

Это лучшее, что я мог придумать, это не идеально, но он действительно выполняет то, что вы хотите.

Создается новый класс, который реализует сгенерированный класс xunit. В моем примере, сгенерированный класс называется YourNormalFeatureClass

public class SpecialTest : YourNormalFeatureClass 
{ 
    private Xunit.Abstractions.ITestOutputHelper helper; 

    public SpecialTest(ITestOutputHelper helper) : base() 
    { 
     this.helper = helper; 
    } 

    public override void ScenarioSetup(ScenarioInfo scenarioInfo) 
    { 
     base.ScenarioSetup(scenarioInfo); 

     // you'd want a better way to keep track of this string 
     TechTalk.SpecFlow.TestRunnerManager.GetTestRunner().ScenarioContext.Set(this.helper, "helper"); 
    } 

} 

Теперь вы сможете получить доступ к XUnit ITestOutputHelper внутри ваших шагов файла через

var helper = this._scenarioContext.Get<Xunit.Abstractions.ITestOutputHelper>("helper"); 
helper.WriteLine("output from within the steps file that will be written to xunit!"); 

Вы должны были бы быть оборонительным с этим helper переменная, чтобы вы не получили NullReferenceException's

Недостатком этого является то, что у вас теперь есть 2 копии одного и того же теста, потому что вы унаследовали старый тест. Поэтому в этом случае у вас есть тесты от SpecialTest и YourNormalFeatureClass. Это означает, что вам не нужно будет запускать тесты YourNormalFeatureClass и выполнять только тесты SpecialTest.

Все это легко решить, если SpecFlow позволяет настроить процесс генерации кода. Таким образом, вы можете открыть ITestOutputHelper сгенерированный код. Потребление его из шагов будет одинаковым.

+2

С августа отправляется запрос на тягу, который выполняет именно это: https://github.com/techtalk/SpecFlow/pull/689 – Lucero

+0

Это потрясающе, питти, они не тянут его в –