我在编写功能文件时遇到了麻烦,因为我目前希望在每种情况下都具有多个步骤定义。这是我的功能文件:
Feature: Add new voucher
As a user I want to be able to add vouchers
Scenario Outline: Add new voucher with an invalid voucher
Given a trip voucher <Voucher>
When I access "/voucher" endpoint
Then error message should be "Voucher is invalid"
Examples:
|Voucher |
|ABCDEFG |
|1234567 |
|invaL!Ds |
Scenario Outline: Add a previously redeemed voucher
Given a used voucher <Voucher>
When I access "/voucher" endpoint
Then error message should be "Voucher has already been used"
Examples:
|Voucher |
|VALIDVOUCHER |
我正在努力在Go上构建REST API,同时学习在Java上创建集成测试,因为QA用于测试。第When I access x endpoint
行的最佳做法是什么?我知道它将产生Duplicate step definition error
。我应该更改特征文件的编写方式,还是缺少一些Java技巧?
答案 0 :(得分:1)
我目前正在使用SpecFlow + .NET,过去我也使用过jBehave + Java。
您所做的一切都很好,它不会给您任何错误。实际上,拥有这样的Given-When-Then框架的优势之一是能够重用这些短语。
您需要注意的是确保您的步骤:当我访问“ / voucher”端点时:应该将其映射到步骤文件中的仅一个Java方法。所以,像这样:
@When("I access "/voucher" endpoint")
public void WhenIAccessVoucherEndpoint(){
// implementation of your step. may be make a Rest call.
}
因此,每次您在方案文件中引用此步骤时,框架都会始终为您调用此方法。这样,您将构建基本的构建基块(如果正在使用页面对象模式测试网站,则可以构建页面)和短语。因此,编写更多方案将变得越来越容易,因为这仅是找到实现的正确短语并查看它们是否可以重复使用的问题。
答案 1 :(得分:0)
在您的示例中,如果两个步骤定义都调用相同的端点并执行相同的操作,则建议Re-Use
进行步骤定义。
作为最佳实践并充分利用该工具,始终建议通过参数化短语并将数据作为输入参数进行传递来提高步进定义的可重用性。
如果将此类可重复使用的步骤定义分组在common-step-definition类下并进行引用,则对代码维护有利。该工具具有扫描所有可用的步进定义并调用相应功能的能力。
如果我们有重复的步进定义,则可能会出现"matches more than one step definition"
错误消息。
如果您仍要维护两个不同的步进定义功能,并且每个功能都有不同的实现,则建议修改短语