我希望能够从Visual Studio外部更改我的功能文件并获取更新的功能文件,以便后续测试执行,而无需编译我的测试项目。是否有可能做到这一点?有人可以帮助指定执行此操作所需的确切步骤吗?我正在使用MsTest。
以下是我遵循的步骤,但我收到消息“没有要执行的测试”。每一次:
使用Specflow generate all命令重新生成测试:
Specflow generateall TestProject.csproj / force / verbose
创建报告:
mstest /testcontainer:Test.Dll /resultsfile:TestResult.trx
之前曾问过类似的question,我正按照Marcus在那里提到的相同步骤。
更新 这是我想做的。考虑以下.feature文件:
功能:分数计算
作为一名球员 我希望系统计算我的总分 所以我知道我的表现
场景:另一个初学者游戏 鉴于一个新的保龄球比赛 当我滚动以下系列时:2,7,3,4,1,1,5,1,1,1,1,1,1,1,1,1,1,1,5,1 然后我的总分应该是40
在上面的功能文件中,我想更改数字的数据系列并更改总分并再次运行相同的测试以检查它是否正常运行并获得正确的分数 < / p>
答案 0 :(得分:0)
我无法看到你想要的是什么。 SpecFlow从要素文件生成单元测试类。这些单元测试类必须在运行之前进行编译,与 ANY 代码更改相同。
您正在进行“无法执行测试”。因为您仍在运行旧版本的dll,它不包含任何测试,因为您没有使用specflow生成的新代码重建它。
从链接问题中所述,似乎他们说可以在不重新编译的情况下运行某些更改,但老实说我看不出这是怎么可能的,即使某些功能文件更改是可能的,我想解决方案将特定于某些单元测试框架并且不受支持。
修改强>
当我查看生成的feature.cs文件时,你有这个:
[Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
[Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute("Another beginners game")]
[Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Score Calculation")]
public virtual void AnotherBeginnersGame()
{
TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Another beginners game", ((string[])(null)));
#line 5
this.ScenarioSetup(scenarioInfo);
#line 6
testRunner.Given("a new bowling game", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
#line 7
testRunner.When("I roll the following series: 2,7,3,4,1,1,5,1,1,1,1,1,1,1,1,1,1,1,5,1", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
#line 8
testRunner.Then("my total score should be 40", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
#line hidden
this.ScenarioCleanup();
}
正如您所看到的,它包含您在代码中的实际值列表和预期结果
这肯定意味着您无法在不重新编译的情况下更改要素文件并进行测试更新,否则对cs文件的任何更改都不会反映在您正在运行的实际dll中。
答案 1 :(得分:0)
如果您只想更改测试数据,请使用保存在VS项目中的CSV文件。然后在Given
语句中打开该文件,解析它并将其保存到ScenarioContext.Current
对象,以便在后续步骤中使用。