【发布时间】:2021-11-11 07:15:57
【问题描述】:
我正在尝试Specflow,这是我的方案
Scenario: Calculate user age from date of birth
When I fill details
| Name | DateOfBirth |
| John | 2000-01-01 |
| Mike | 2001-01-01 |
Then user age is calculated
| Name | DateOfBirth | Age |
| John | 2000-01-01 | 21 |
| Mike | 2001-01-01 | 20 |
这是我的步骤
[Binding]
public class GetAgeFromDobSteps
{
private IEnumerable<User> actualUsers = new Table().CreateSet<User>();
[When(@"I fill details")]
public void WhenIFillDetails(Table table)
{
actualUsers = table.CreateSet<User>();
foreach (var actualUser in actualUsers)
{
actualUser.CalculateAge();
}
}
[Then(@"user age is calculated")]
public void ThenUserAgeIsCalculated(Table table)
{
var expectedUsers = table.CreateSet<User>();
expectedUsers.Should().BeEquivalentTo(actualUsers);
}
}
但是当我运行它时,private IEnumerable<User> actualUsers = new Table().CreateSet<User>();有一个错误
错误是System.ArgumentException: 'No headers to add (Parameter 'header')'
【问题讨论】:
-
您实际上是在
WhenIFillDetails步骤中分配actualUsers。只需在声明时将字段actualUsers保留为未分配 - 只需:private IEnumerable<User> actualUsers;。发生异常是因为您试图从空表中创建一组值。 -
为什么不像这样初始化:
private IEnumerable<User> actualUsers = Enumerable.Empty<User>();?或者只是完全省略初始化,考虑到actualUsers分配给WhenIFillDetails?