我正在编写一个场景来验证BDD中移动应用中的卡片。该卡包含7个元素,每个元素都有一个值或一个副本。这些需要使用预定义的值/计算值进行验证。我想知道,我可以在单个场景中为所有7个元素编写断言,还是用2/3分割它?
答案 0 :(得分:2)
没有太多细节,所以我不能具体回答。假设您正在使用Python客户端进行Appium测试。在这种情况下使用一些单元测试框架会很好(它可能是Python内置的单元测试模块)。
我建议您在单独的测试用例中验证每个元素。这种方法将使您的生活更轻松 - 您将为每个元素验证获得单独的状态。
谈到“场景可以发生多少断言”问题 - 我相信取决于您使用的工具。使用Python unittest ,您可能在单个测试用例中有很多断言,但这是不好的做法。请阅读以下内容: https://softwareengineering.stackexchange.com/questions/7823/is-it-ok-to-have-multiple-asserts-in-a-single-unit-test
答案 1 :(得分:0)
如果我通过“卡片”知道你的意思,这将是一个帮助,但我们假设这是一张借记卡/信用卡。
我们在这里可以做的只是有一个断言:
Scenario: Adding a new payment method
Given I have a card with the following details:
| Name | Mr Test McTestington |
| Card Number | 4567 8901 2345 6789 |
| Card Type | Credit |
| Issuer | MasterCard |
| Valid From Date | 01/23 |
| Expiry Date | 12/34 |
| Security Code | 123 |
And the card details are valid
When I add the card as a new payment method
Then I should be able to checkout the items in my basket with the card
And I should see the order confirmation screen
在And the card details are valid
步骤中,您将拥有所有项目的验证码。这可能涉及将这些功能分解为可在其他地方使用的功能:
public boolean validName(string name){
bool valid = false;
// validate name - set valid to true if it meets validation criteria
return valid;
}
作为一个例子(Java不是我的强项,但这只是我的建议的大纲)。
从本质上讲,使黄瓜做得最好,可以用开发团队和业务部门商定的语言描述功能,这样每个人都可以准确理解你的场景中描述的内容。它更多的是谈话而不是测试。
就像我在我的示例中所做的那样,您不一定需要单独验证每张卡片细节吗?
这一切都归结为判断。
如果它确实归结为此判断调用,您认为每个事物都需要单独验证,为什么不使用场景大纲来帮助您?
Scenario Outline: Valid card details
Given I have a card with the "<detail>" of "<value>"
Then the card detail "<detail>" should be valid
Examples:
| detail | value |
| Name | Mr Test McTestington |
| Card Number | 4567 8901 2345 6789 |
| Card Type | Credit |
| Issuer | MasterCard |
| Valid From Date | 01/23 |
| Expiry Date | 12/34 |
| Security Code | 123 |