我有一个移动自动化项目,该项目使用 .NET 6 以及 Specflow、NUnit 和 Xamarin.UITest。 当我的项目在 .NET Framework 4.8 上并且使用钩子 [OneTimeTearDown] 时,我能够创建一个控制台方法,可以使用代码生成实时文档。请参阅此处以供参考: https://github.com/SpecFlowOSS/SpecFlow/issues/2701 在 .NET 6 中,我遇到一个问题,即当它生成活动文档时,但它使用的是上次运行的 TestExecution.json,而不是刚刚完成的运行。我发现这是因为 TestExecution.json 是在我启动的 [OneTimeTearDown] 方法之后生成的。这是由于 Specflow NUnit 使用相同的钩子,见下文:
// <auto-generated />
#pragma warning disable
using System.CodeDom.Compiler;
using System.Diagnostics;
using global::NUnit.Framework;
using global::TechTalk.SpecFlow;
using global::System.Runtime.CompilerServices;
[GeneratedCode("SpecFlow", "3.9.74")]
[SetUpFixture]
public class HEBPharmacy_UITests_NUnitAssemblyHooks
{
[OneTimeSetUp]
[MethodImpl(MethodImplOptions.NoInlining)]
public void AssemblyInitialize()
{
var currentAssembly = typeof(HEBPharmacy_UITests_NUnitAssemblyHooks).Assembly;
TestRunnerManager.OnTestRunStart(currentAssembly);
}
[OneTimeTearDown]
[MethodImpl(MethodImplOptions.NoInlining)]
public void AssemblyCleanup()
{
var currentAssembly = typeof(HEBPharmacy_UITests_NUnitAssemblyHooks).Assembly;
TestRunnerManager.OnTestRunEnd(currentAssembly);
}
}
#pragma warning restore
这是我的方法:
[AfterTestRun]
[OneTimeTearDown]
public static void AfterTestRun()
{
if (TestEnvironment.Platform.Equals(TestPlatform.Local))
{
Thread.Sleep(1000);
GenerateLivingDoc();
}
}
请记住,[AfterTestRun] 的 Specflow 挂钩在 Mac 上不起作用,因此这不是一个解决方案。正如你所看到的,我在方法上有它,但它不能解决问题。 有没有办法设置 [OneTimeTearDown] 挂钩,以便我的方法在 Specflow 的方法之后启动?我该怎么做?
我不知道如何设置订单,但我能够解决我的生活文档问题。通过从 SpecFlow 本身获取方法并将它们添加到我的代码库中。这些是我采取的方法:
[SetUpFixture]
public class RxCheck_UITests_NUnitAssemblyHooks
{
//[OneTimeSetUp]
[MethodImpl(MethodImplOptions.NoInlining)]
public void AssemblyInitialize()
{
var currentAssembly = typeof(RxCheck_UITests_NUnitAssemblyHooks).Assembly;
TestRunnerManager.OnTestRunStart(currentAssembly);
}
//[OneTimeTearDown]
[MethodImpl(MethodImplOptions.NoInlining)]
public void AssemblyCleanup()
{
var currentAssembly = typeof(RxCheck_UITests_NUnitAssemblyHooks).Assembly;
TestRunnerManager.OnTestRunEnd(currentAssembly);
}
}
一旦我添加了当实时文档生成时我控制的那些方法,如下所示:
[OneTimeSetUp]
public void OnAutomationStartup()
{
RxCheck_UITests_NUnitAssemblyHooks.AssemblyInitialize();
}
[AfterTestRun]
[OneTimeTearDown]
public void AfterTestRun()
{
if (TestEnvironment.Platform.Equals(TestPlatform.Local))
{
RxCheck_UITests_NUnitAssemblyHooks.AssemblyCleanup();
Thread.Sleep(1000);
GenerateLivingDoc();
}
}
我希望这可以帮助任何使用 .net 6 使用 SpecFlow 的人