我是NUnit的新手,并且对SpecFlow测试框架和NUnit测试框架感到困惑。
现有项目使用NUnit,如下所示。具有[Test]属性的所有方法都显示在NUnit GUI中(如果我从方法中删除[Test],则测试用例不会显示在NUnit GUI中):
[TestFixture]
public class AccountTest
{
[Test]
public void TransferFunds()
{
Account source = new Account();
source.Deposit(200m);
}
[Test]
public void TransferWithInsufficientFunds()
{
}
}
当我在同一项目中使用SpecFlow进行编码时,SpecFlow框架有所不同,从[Given],[When],[Then]开始。每个SpecFlow场景都显示在Nunit GUI上。
我正在做的是用一个SpecFlow方法替换每个[Test]方法。
例如。:
[Test]
public void TransferFunds()
{
Account source = new Account();
source.Deposit(200m);
}
转向
[Then(@"I Transfer Funds")]
public void ITransferFunds()
{
Account source = new Account();
source.Deposit(200m);
}
这是我的问题:
我的问题可能是入门级,谢谢您的回答!
最佳答案
我认为您需要了解的第一件事是NUnit
和SpecFlow
不互斥。SpecFlow
总体上具有很多组件,但是您现在需要了解的是SpecFlow
用于将 Gherkin
编写的功能文件绑定(bind)到可由测试运行程序运行的C#
代码。该C#
代码分为两部分,自动生成的一部分,以及您和您的团队编写的一部分。
您编写的部分是那些具有Given
,When
和Then
属性的方法。它们是步骤定义(更多信息here)。这些绑定(bind)需要遵循以下规则:
自动生成的部分生成使用NUnit
,MSTest
和xUnit
以及其他可用unit test providers编写的测试方法。如您所见,使用相同的小 cucumber (here和here),您最终得到不同的自动生成的文件(here和here)
让我们来看一个特定的场景(source)
Scenario: One single spare
Given a new bowling game
When I roll the following series: 3,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Then my total score should be 29
如果单元测试提供者是
NUnit
,那么该步骤将生成以下测试方法(source):[NUnit.Framework.TestAttribute()]
[NUnit.Framework.DescriptionAttribute("One single spare")]
public virtual void OneSingleSpare()
{
TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("One single spare", ((string[])(null)));
#line 7
this.ScenarioSetup(scenarioInfo);
#line 8
testRunner.Given("a new bowling game");
#line 9
testRunner.When("I roll the following series:\t3,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1");
#line 10
testRunner.Then("my total score should be 29");
#line hidden
testRunner.CollectScenarioErrors();
}
如果单元测试提供者是
xUnit
,那么该步骤将生成以下测试方法(source):[Xunit.FactAttribute()]
[Xunit.TraitAttribute("FeatureTitle", "Score Calculation (alternative forms)")]
[Xunit.TraitAttribute("Description", "One single spare")]
public virtual void OneSingleSpare()
{
TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("One single spare", ((string[])(null)));
#line 7
this.ScenarioSetup(scenarioInfo);
#line 8
testRunner.Given("a new bowling game");
#line 9
testRunner.When("I roll the following series:\t3,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1");
#line 10
testRunner.Then("my total score should be 29");
#line hidden
testRunner.CollectScenarioErrors();
}
无论使用什么单元测试提供程序,您的步骤定义方法都几乎*相同(如您所见here for
NUnit
和here for xUnit
)。您可以使用几种不同的步骤定义样式。它们被描述为here
*唯一的区别可能是您的主张。
关于c# - Nunit框架与SpecFlow框架,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33918055/