Cli*_*way 2 c# automated-tests assert specflow fluent-assertions
我们使用Specflow,目前,我们的大多数断言都是使用Fluent Assertions完成的,例如:
myval.Should().NotBe(null)
一切都运行良好,但在某些情况下,我们希望相同的代码有时断言不确定,有时不会.
例如,假设我们有一个调用方法来安装AUT的步骤.
断言AUT可以正确安装的测试将使用此方法作为WHEN/THEN步骤的一部分.
在这种情况下,如果安装失败,我们希望正常进行并且无法通过测试.
GIVEN The AUT is NOT installed
WHEN I install the AUT
但是,对于所有其他测试,可以将相同的方法作为GIVEN步骤的一部分或作为BeforeScenario/BeforeFeature挂钩的一部分调用,并且在该实例中,如果安装失败,则测试应该失败,因为它是不是测试本身失败,而是安装阶段.
GIVEN the AUT is installed
WHEN I perform function X of the AUT
所以在这个例子中,让我们假设WHEN I install the AUT第一个测试中的步骤定义,以及GIVEN the AUT is installed第二个测试中的步骤定义只是用类似的东西调用辅助方法AppFacade.Install()
当然,我们可以AppFacade.Install()使用条件等垃圾和所有其他辅助方法,但我想知道是否有人有更优雅的解决方案 - 即扩展断言引擎的方式,以便它自动应用这个逻辑 - 我看到没有障碍实现此目的的Specflow方面,您可以检查Specflow上下文对象以检测您所处的步骤类型.
理想情况下,我们希望坚持使用流利断言,但如果这过于复杂化,我们会愿意重新考虑.
我打算建议你不要问正确的问题,因为你暗示当Specflow步骤执行失败时,测试应该是不确定的,但你已经意识到了.
所以要回答你的实际问题:
根据上述逻辑,是否有可能抛出一个可以将测试标记为不确定的异常?
是的,你可以使用后的AfterStep钩(见Specflow钩这里)检查是有任何异常抛出并执行Assert.Inconclusive(),如果你正在使用Nunit或其他等效方法,喜欢Specflow的ScenarioContext.Current.Pending()不被连接到安装在测试框架中,唯一需要注意的是ScenarioContext.Current.Pending()不明确的ScenarioContext.TestStatus,所以你的测试运行器将其标记为红色,你将不得不使用反射来设置TestStatus所描述的特性在这里.
它看起来像这样:
[AfterStep]
public void Check()
{
if (ScenarioContext.Current.TestError is AssertionException &&
ScenarioContext.Current.CurrentScenarioBlock == ScenarioBlock.Given)
Assert.Inconclusive(ScenarioContext.Current.TestError.Message);
}
Run Code Online (Sandbox Code Playgroud)
这是我创建的一个演示.

| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |