これは私が思いつくことができる最高のものです。理想的ではありませんが、あなたが望むものを達成します.
生成された 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");
}
}
ITestOutputHelper
これで、ステップ ファイル内から次の方法でXUnit にアクセスできるようになりました。
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
ます
これの欠点は、古いテストを継承したため、同じテストのコピーが 2 つあることです。したがって、この場合、 および からのテストがSpecialTest
ありYourNormalFeatureClass
ます。これは、YourNormalFeatureClass
テストを実行する必要はなく、テストのみを実行する必要があることを意味しますSpecialTest
。
SpecFlow でコード生成プロセスをカスタマイズできるようにすれば、これらすべてを簡単に解決できます。そうすればITestOutputHelper
、生成されたコードを介して公開できます。ステップ内からの消費は同じです。