我正在尝试specFlow辅助,不知道如何从表创建类属性.想象一下,我有这堂课:
public class Tracking
{
public string Category { get; set; }
}
public class ODARequest
{
public string Title { get; set; }
public string Name { get; set; }
public Tracking Tracking { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的给定场景是下一个:
Scenario: Successfully create an account
Given I have entered the following data into the ODA form:
| Field | Value |
| Title | Mr |
| Name | Andy |
| Tracking Category | MDA |
public void GivenIHaveEnteredTheFollowingDataIntoTheODAForm(Table table)
{
var request = table.CreateInstance<ODARequest>();
}
Run Code Online (Sandbox Code Playgroud)
不会填充"跟踪"属性.任何人都知道如何Tracking.Category在表中描述这种情况?
我无法找到一种方法来获取specflow以将"CreateInstance"映射到非标准数据类型属性.
但是,在这种情况下,您至少可以使用StepArgumentTransformation如下:
[Given(@"I have entered the following data into the ODA form:")]
public void GivenIHaveEnteredTheFollowingDataIntoTheODAForm(ODARequest request)
{
Assert.IsNotNull(request.Tracking);
}
[StepArgumentTransformation(@".*")]
public ODARequest StringToTracking(Table input)
{
return new ODARequest() {
Title = input.Rows.Single(row => row["Title"])["value"],
Name = input.Rows.Single(row => row["Name"])["value"],
Tracking = new Tracking()
{ Category = input.Rows.Single(row => row["Field"] == "Tracking Category")["Value"] }
};
}
Run Code Online (Sandbox Code Playgroud)
通过一些工作,你可以整理stepargumenttransformation以接受每个参数作为可选(而不是如果省略则抛出"single()").
我觉得应该有更好的方法来做到这一点,更像是你原来建议的代码.希望这是有帮助的.
我一直在遇到这个问题,并思考如何一步到位。
Scenario: Successfully create an account
Given I have entered the following data into the ODA form:
|Title | Name | Category|
| Mr | Andy | MDA |
public void GivenIHaveEnteredTheFollowingDataIntoTheODAForm(Table table)
{
var request = table.CreateInstance<ODARequest>();
request.Tracking = table.CreateInstance<Tracking>();
}
Run Code Online (Sandbox Code Playgroud)
工作原理:您可以为您拥有的每个复杂属性调用“CreateInstance”,这样specflow将为您创建一个实例。因此,您可以拥有一个包含不同类型属性的表。
通过这样做,您将不需要不同的步骤,也不需要在步骤之间共享数据。
缺点是,如果您的类具有许多不同类型的属性,您最终可能会得到一个巨大的表。
注意:正如 @Alex M 评论的那样,当类具有同名属性时存在风险。实际上会发生的是,由于两个类的属性名称匹配,两个实例将获得相同的值。
| 归档时间: |
|
| 查看次数: |
4752 次 |
| 最近记录: |