Specflow 允许为 nullable Table 参数
Specflow allowing nullable Table parameter
这是场景中的示例步骤:
Given ...
...
When create ride ticket
| hour | passangers | ... |
And create ride ticket rideNumber 3
...
Then ride is successful
(相关部分我保留了,剧情讲的什么不用看)
执行此步骤:
[When(@"create\s*ride(?: rideNumber (.+))?")]
public void WhenCreateRide(int? rideNumber , Table rideDetails)
{
...
}
我将这个新的 Table 参数添加到步骤定义中。前面的逻辑从另一个步骤定义中获取了细节。
我正在尝试同时允许旧逻辑和新逻辑 - 将 Table 直接传递给此步骤定义。
如果我删除步骤的 rideNumber 2 部分(就像在第一个 When 语句中一样),上面的方法会将 rideNumber 参数视为 null(因为我将其标记为可为 null)。
但是,如果我根本不将 table 传递给场景 - 它会抛出绑定异常。
我有很多(超过 100 个)场景使用这种旧逻辑(因此他们没有传递给他们的 table),所以向所有场景添加 Table 似乎我最不想做的事。
知道如果我不通过它为什么不将 Table 视为 null 吗?
知道如何解决这个问题吗?
这些应该是单独的步骤定义,否则您会遇到这种情况。与创建两个单独的步骤定义相比,您将花费更多的时间来尝试让它发挥作用。在生成步骤定义时,您可能必须从 SpecFlow 建议的默认名称重命名步骤定义方法之一。
[When(@"create ride ticket rideNumber (.+)")]
public void WhenCreateRideWithNumber(int rideNumber)
{
...
}
[When(@"create ride ticket")]
public void WhenCreateRideTicket(Table rideDetails)
{
...
}
如果这两个步骤定义有共同的逻辑,创建一个包含共同逻辑的私有方法,然后从两个步骤定义中调用这个私有方法:
[When(@"create ride ticket rideNumber (.+)")]
public void WhenCreateRideWithNumber(int rideNumber)
{
...
CreateRideTicket(...);
...
}
[When(@"create ride ticket")]
public void WhenCreateRideTicket(Table rideDetails)
{
...
CreateRideTicket(...);
...
}
private void CreateRideTicket(...)
{
// common logic
}
这是场景中的示例步骤:
Given ...
...
When create ride ticket
| hour | passangers | ... |
And create ride ticket rideNumber 3
...
Then ride is successful
(相关部分我保留了,剧情讲的什么不用看)
执行此步骤:
[When(@"create\s*ride(?: rideNumber (.+))?")]
public void WhenCreateRide(int? rideNumber , Table rideDetails)
{
...
}
我将这个新的 Table 参数添加到步骤定义中。前面的逻辑从另一个步骤定义中获取了细节。 我正在尝试同时允许旧逻辑和新逻辑 - 将 Table 直接传递给此步骤定义。
如果我删除步骤的 rideNumber 2 部分(就像在第一个 When 语句中一样),上面的方法会将 rideNumber 参数视为 null(因为我将其标记为可为 null)。 但是,如果我根本不将 table 传递给场景 - 它会抛出绑定异常。
我有很多(超过 100 个)场景使用这种旧逻辑(因此他们没有传递给他们的 table),所以向所有场景添加 Table 似乎我最不想做的事。
知道如果我不通过它为什么不将 Table 视为 null 吗? 知道如何解决这个问题吗?
这些应该是单独的步骤定义,否则您会遇到这种情况。与创建两个单独的步骤定义相比,您将花费更多的时间来尝试让它发挥作用。在生成步骤定义时,您可能必须从 SpecFlow 建议的默认名称重命名步骤定义方法之一。
[When(@"create ride ticket rideNumber (.+)")]
public void WhenCreateRideWithNumber(int rideNumber)
{
...
}
[When(@"create ride ticket")]
public void WhenCreateRideTicket(Table rideDetails)
{
...
}
如果这两个步骤定义有共同的逻辑,创建一个包含共同逻辑的私有方法,然后从两个步骤定义中调用这个私有方法:
[When(@"create ride ticket rideNumber (.+)")]
public void WhenCreateRideWithNumber(int rideNumber)
{
...
CreateRideTicket(...);
...
}
[When(@"create ride ticket")]
public void WhenCreateRideTicket(Table rideDetails)
{
...
CreateRideTicket(...);
...
}
private void CreateRideTicket(...)
{
// common logic
}