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