我有这个Specflow功能:
Given I have CoolData with <a> , <b> , <c> and <d>:
| a | b | c | d |
| cool data | | 1.3 | Cool notes |
| cool data | 1.4 | | Cool notes |
| cool data | 1.3 | 1.3 | Cool notes |
| cool data | 1.3 | 1.3 | Cool notes |
我有这个方法:
[Given(@"Given I have CoolData with (.*) , (.*) , (.*) and (.*) :")]
public void GivenIhaveCoolDatawithAnd(string p0, string p1, string p2, string p3, Table table)
{
var cool = new CoolData
{
a= p0,
b= decimal.Parse(p1),
c= decimal.Parse(p2),
d= p3,
};
}
我的问题:当我运行此测试时,p0
,p1
,p2
和p3
会映射到字面上说"<a>"
的字符串,{{ 1}},"<b>"
和"<c>"
,而不是表格中的值。我究竟做错了什么?我试图为此表中的每一行重复单元测试。
答案 0 :(得分:3)
你误解了小黄瓜是如何运作的。你所做的是把两个概念,即表格和场景示例混为一谈。请参阅the documentation for cucumber并查看数据表和方案大纲之间的区别
我相信你不想在这个例子中有一个表,所以你应该使用一个带有例子的场景大纲,如下所示:
Scenario Outline: some title
Given I have CoolData with <a> , <b> , <c> and <d>
Examples:
| a | b | c | d |
| cool data | | 1.3 | Cool notes |
| cool data | 1.4 | | Cool notes |
| cool data | 1.3 | 1.3 | Cool notes |
| cool data | 1.3 | 1.3 | Cool notes |
这将导致生成4个测试,每个测试运行来自示例
的一行数据你还需要调整你的步骤方法,不要指望现在的表格(因为表格现在是一组例子)
[Given(@"Given I have CoolData with (.*) , (.*) , (.*) and (.*)")]
public void GivenIhaveCoolDatawithAnd(string p0, string p1, string p2, string p3)
{
var cool = new CoolData
{
a= p0,
b= decimal.Parse(p1),
c= decimal.Parse(p2),
d= p3,
};
}