これは私が思い付く最高のものです。理想的ではありませんが、あなたが望むものを達成します。
生成された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
の
これは、古いテストを継承したので同じテストのコピーが2枚あることに欠点があります。この場合は、SpecialTest
とYourNormalFeatureClass
のテストがあります。つまり、YourNormalFeatureClass
テストを実行せずに、SpecialTest
テストのみを実行する必要があります。
SpecFlowでコード生成プロセスをカスタマイズすることができれば、これは簡単に解決できます。そうすれば、生成されたコードを介してITestOutputHelper
を公開することができます。ステップ内からの消費は同じになります。
あなたのステップで 'Trace.WriteLine'や' Debug.WriteLine'を使うことはできませんか? –
@Avalanchisが別のコメントで提供したリンクに記載されています。残念ながら、xUnit2はTraceとDebugの出力をキャプチャしません。 ITestOutputHelperを使用する必要があります。 [暴言]私はxUnit.netがますます嫌なことになり始めています。 githubでも、報告されている問題に対処するための寄稿者はほとんどなく、多くのコミットと回答はないようです。 [暴言] – softbear