c# - 在没有单元测试框架的情况下使用 Specflow

标签 c# .net-6.0 specflow gherkin

因此,对于我当前的项目,我需要在(物理)系统上执行多项测试。 在我的公司内,我们有这个测试框架,它提供了几个开箱即用的功能,例如将我的结果写入数据库等。

现在我听说了 BDD,并且发现用小 cucumber 方式编写这些测试会非常漂亮和干净。 所以我开始研究 Specflow,它看起来非常好。 Specflow 的唯一问题是您需要使用单元测试框架。这根本不是我想要的,因为我自己的框架已经提供了所有这些东西。例如,启动测试需要由运算符(operator)通过 GUI 来完成。所以根本不需要单元测试框架。

现在我的问题是我是否可以简单地使用 Specflow 来生成这些测试(在他们自己的测试类或其他东西中)并继续使用我自己的框架。

举个例子,我正在寻找的是这样的东西:

Given that the machine is in base state
When we open the valve
Then the valve sensor should have value higher than 450

然后有一个StepDefinition文件,其中将包含实际的机器接口(interface)(c的示例代码)

public void MachineInBaseState()
{
    machine.GoToBaseState();
}
public void ValvePosition(bool open)
{
    machine.SetValve(open);
}
public void CheckValveSensorPosition(int valueToCheckAgainst)
{
    testResults.Add(new ValueResult(value:machine.GetSensorValue(),min:valueToCheckAgainst,max:double.NaN));
}

然后在项目构建过程中,生成 gherkin 文件,以便我自己的测试框架可以获取生成的测试结果。

我知道这可能不是很多人都会做的事情,但也许有人以前见过类似的事情。

当然,另一种方法是编写源生成器,但这会花费更多时间。

最佳答案

您需要为您的框架构建自己的 UnitTestProvider。

一个用于编译时(当生成文件背后的代码时):https://github.com/SpecFlowOSS/SpecFlow/tree/master/TechTalk.SpecFlow.Generator/UnitTestProvider

这是 feature.cs 文件生成的内容。

还有一个用于运行时:例如 xUnit https://github.com/SpecFlowOSS/SpecFlow/blob/master/Plugins/TechTalk.SpecFlow.xUnit.SpecFlowPlugin/XUnitRuntimeProvider.cs

所有这些都可以通过插件插入 SpecFlow,但这并不是最容易做到的。

关于c# - 在没有单元测试框架的情况下使用 Specflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73165522/

相关文章:

c# - 适用于 .NET 开发的 Windows 7

c# - 如何使用 TextBox (WPF C#) 过滤 Datagrid 值

c# - .NET 6 升级导致 Azure Function 上的 DinkToPdf 损坏

c# - 没有 setter 的属性不能分配给

c# - 在 web 服务项目上获取 StackOverflow 异常,但在 winform 项目中没有

c# - 使用数组将输入值分配给 cmdmysql.Parameters.Add

c# - 迁移到 .NET 6 时,所有测试均未得出结论,并出现相同的 "An assembly specified in the application dependencies manifest was not found"错误

asp.net-identity - 角色不起作用 - 错误地显示为用户不在角色中,.NET 6(从 .Net Core 3.2 升级)

visual-studio - 为什么不是所有 NUnit 测试类别都显示在测试资源管理器中?

selenium - 我想在specflow中跳过带有@ignore标签的测试