【发布时间】:2018-01-25 15:38:47
【问题描述】:
我们有一个 ASP.NET/MVC WebApi 项目,其中包含由 Specflow 驱动的大量端到端测试。到目前为止,所有的请求和响应都是 JSON,所以它工作得很好。
然而,现在我们有一个需要 XML 主体的端点,理想情况下,我们应该将其作为特性文件中的文字......
Scenario Outline:
Given I am authenticated
When I post the following XML
"""
<xml>
<foo>
<Bar>
</foo>
</xml>
"""
Then something good happens
Examples:
| Bar |
| apples |
| bananas |
问题在于我们大量使用了Scenario Outline,而用于注入场景示例属性的 Specflow/Gherkin 语法看起来像 XML 标记,例如<firstName>。
有没有办法将 Specflow/gherkin 与带有场景大纲的 XML 文档一起使用,例如,将示例中的值注入 Bar?
【问题讨论】:
-
你真的需要有文字 XML 吗?这种低级规范与 Specflow 方法不太吻合。将任意 XML 放入
<Bar>似乎也很笨拙(转义会很痛苦...)读者是否有必要真正查看 XML 才能理解该功能?否则,您可能会考虑将其设置为类似于When I call feature X with the frobber set to <Bar>,并将实际的 XML 留给步骤实现。 (请注意,在这种情况下,您拥有可用于捕获/重用/构建请求的完整语言机制。) -
另外,在我的测试中,
<Bar>实际上被替换为apples和bananas。这使您不清楚您的实际问题是什么:您只是不喜欢替换参数看起来像标签吗?标签和参数名有冲突吗? -
是的,对于大多数测试,我们将使用一个步骤,让我们指定 XML 的动态位,如果我们必须这样做,整个事情都不会太糟糕,但是我们倾向于有一两个在特性中包含文字 XML 的“快乐路径”示例——它只是很好的参考。
-
刚刚看到您的第二个回复-我目前无法对此进行测试,这个问题是推测性的-如果它“正常工作”,那就太好了!不过可能还有点不清楚。
-
@Fran 我发现对于机器使用的 API 的测试,在功能中明确包含请求的主体可以有很多价值,而没有任何明显的缺点 - 尽管对于端点的一般测试或它在其他测试的步骤中使用,将身体放在其他地方会更好
标签: c# automated-tests specflow gherkin end-to-end