使用 Gherkin table 的 SpecFlow 测试也在测试中尝试列名
SpecFlow test with Gherkin table also trying column name in tests
我有这个 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
被映射到字符串 [= 17=、"<b>"
、"<c>"
和 "<d>"
,而不是 table 中的值。我究竟做错了什么?我正在尝试为此 table 中的每一行重复单元测试。
你误解了小黄瓜的工作原理。您所做的是将两个概念混为一谈,即 table 和场景示例。看the documentation for cucumber,看看数据table和场景大纲
的区别
我相信在这种情况下您不想要 table,因此您应该使用带有示例的场景大纲,如下所示:
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 个测试,每个测试 运行 来自示例的一行数据
您还需要调整您的步进方法,以不期望 table 现在(因为 table 现在是一组示例)
[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,
};
}
我有这个 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
被映射到字符串 [= 17=、"<b>"
、"<c>"
和 "<d>"
,而不是 table 中的值。我究竟做错了什么?我正在尝试为此 table 中的每一行重复单元测试。
你误解了小黄瓜的工作原理。您所做的是将两个概念混为一谈,即 table 和场景示例。看the documentation for cucumber,看看数据table和场景大纲
的区别我相信在这种情况下您不想要 table,因此您应该使用带有示例的场景大纲,如下所示:
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 个测试,每个测试 运行 来自示例的一行数据
您还需要调整您的步进方法,以不期望 table 现在(因为 table 现在是一组示例)
[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,
};
}