不幸的是我在本地传递了一个Specflow测试,但它在VSO Build vNext服务器上失败了,我真的需要在测试运行期间看到详细信息,这样我才能弄明白发生了什么.
但我正在努力尝试将ITestOutputHelper注入到这样的Specflow绑定中
public SomeSteps(ITestOutputHelper outputHelper)
但是Specflow抱怨这条消息
BoDi.ObjectContainerException无法解析接口:Xunit.Abstractions.ITestOutputHelper(解析路径:…)
在Specflow测试期间,如何查看日志和查看输出?
最佳答案 这是我能想到的最好的,它不是理想的,但它确实能达到你想要的效果.
您创建了一个实现生成的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!");
你需要使用那个辅助变量来防御,以确保你没有得到任何NullReferenceException
这样做的缺点是,您现在拥有相同测试的2个副本,因为您继承了旧测试.所以在这种情况下,你有来自SpecialTest和YourNormalFeatureClass的测试.这意味着您不需要运行YourNormalFeatureClass测试,只需运行SpecialTest测试.
如果SpecFlow允许您自定义代码生成过程,所有这一切都将很容易解决.这样,您就可以通过生成的代码公开ITestOutputHelper.从步骤内消耗它将是相同的.