c# - Specflow 允许可为空的表参数
问题描述
以下是场景中的示例步骤:
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 参数添加到步骤定义中。前面的逻辑从另一个步骤定义中获取了细节。我试图同时允许旧逻辑和新逻辑 - 将表直接传递给此步骤定义。
如果我删除了步骤的rideNumber 2 部分(就像在第一个When 语句中一样),上面的方法会将rideNumber 参数视为null(因为我将其标记为可为null)。但是,如果我根本不将表传递给场景-它将引发绑定异常。
我有很多(超过 100 个)使用这种旧逻辑的场景(因此他们没有传递给他们的表格),所以向所有场景添加一个表格似乎是我最不想做的事情。
知道如果我不通过它为什么不将表格视为 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
}
推荐阅读
- c# - BusinessLogic和WebApi中是否需要使用ConfigureAwait?还是一个就够了?
- javascript - 为什么 swiper 进度事件不反映滑动移动?
- c++ - 如何在main函数中直接使用Locks
- c# - 如何从 Unity 中的 Parent 对象访问子脚本的方法
- sql - 显示重复列值一次,第二列不变
- r - httr GET 返回错误的内容类型
- android - Android 上的 TensorFlow Lite 对不同输入显示相同的预测
- android - 沃达丰网络阻塞 API (Chrome)?
- python - 如何更改除一个标签之外的所有文件的标签和按钮样式?
- typescript - 为什么 TypeScript 不对符号属性使用类型缩小?