首页 > 解决方案 > 在 swift 中实现用于自动化测试的 Screenplay 模式

问题描述

我目前正在学习剧本模式,但在使用 Given 关键字时遇到了问题。对于我当前的用例,这似乎应该是一个问题。

Given(user).has(OpenedTheApplication.successfully())

has 被定义为一个任务

func has(_ task: Task) {
    perform(task)
}

gherkin 关键字定义如下:

class Given: GherkinKeyword {
    func has(_ task: Task) {
        actor.has(task)
    }
}

因此,如果我正确理解剧本,那么任务不应创建有关系统状态的查询。

所以我想定义这个:

Given(user).wasAbleTo(OpenTheApplication.toTheHomePage())

接着

func wasAbleTo(_ question: Question) {
    ask(question)
}

并且 gherkin 关键字也更新了:

class Given: GherkinKeyword {
    func has(_ task: Task) {
        actor.has(task)
    }
    func wasAbleTo(_ question: Question) {
        actor.wasAbleTo(question)
    }
}

这是断言应用程序已正确启动的正确思维方式吗?

标签: swiftdesign-patternsautomated-testsbddxctest

解决方案


如果您想对任何事情进行断言,那么这应该是“那么”,而不是“给定”。如果您担心测试所需的设置(Givens)的任何部分可能不起作用,最好编写一个单独的测试来检查这些功能。这将允许您使用更复杂的测试所需的任何设置,而无需在设置(给定)阶段断言(问题)。

您需要的测试的 Gherkin 可能如下所示:

Scenario: Homepage is presented on app launch
When the user launches the application successfully
Then the user sees the homepage

Scenario: Navigate to search
Given the user has launched the application successfully
When the user navigates to the search page
Then the user sees the search page

推荐阅读