此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
MockMvc 和 Geb
在上一节中,我们看到了如何将 MockMvc 与 WebDriver 一起使用。在本节中,我们将 使用 Geb 使我们的测试更加 Groovy-er。
为什么选择 Geb 和 MockMvc?
Geb 由 WebDriver 提供支持,因此它提供了许多与我们相同的好处 Web驱动程序。然而,Geb 通过处理一些 样板代码。
MockMvc 和 Geb 设置
我们可以轻松初始化一个 GebBrowser
使用 MockMvc 的 Selenium WebDriver,作为
遵循:
def setup() {
browser.driver = MockMvcHtmlUnitDriverBuilder
.webAppContextSetup(context)
.build()
}
这是使用MockMvcHtmlUnitDriverBuilder .对于更高级的
用法,请参阅高深MockMvcHtmlUnitDriverBuilder . |
这确保了任何 URL 引用localhost
因为服务器被定向到我们的MockMvc
实例,无需真正的 HTTP 连接。任何其他 URL 都是
正常使用网络连接请求。这使我们可以轻松测试
CDN。
MockMvc 和 Geb 用法
现在我们可以像往常一样使用 Geb,但无需将我们的应用程序部署到 一个 Servlet 容器。例如,我们可以请求视图使用 以后:
to CreateMessagePage
然后,我们可以填写表格并提交以创建消息,如下所示:
when:
form.summary = expectedSummary
form.text = expectedMessage
submit.click(ViewMessagePage)
任何未找到的无法识别的方法调用或属性访问或引用都是 转发到当前页面对象。这删除了我们 直接使用 WebDriver 时需要。
与直接使用 WebDriver 一样,这通过使用 Page 对象改进了 HtmlUnit 测试的设计
模式。如前所述,我们可以将页面对象模式与 HtmlUnit 一起使用,并且
WebDriver,但使用 Geb 会更容易。考虑我们新的基于 GroovyCreateMessagePage
实现:
class CreateMessagePage extends Page {
static url = 'messages/form'
static at = { assert title == 'Messages : Create'; true }
static content = {
submit { $('input[type=submit]') }
form { $('form') }
errors(required:false) { $('label.error, .alert-error')?.text() }
}
}
我们CreateMessagePage
延伸Page
.我们不讨论细节Page
,但是,在
summary,它包含我们所有页面的通用功能。我们定义了一个 URL,其中
可以找到此页面。这使我们能够导航到该页面,如下所示:
to CreateMessagePage
我们还有一个at
关闭,确定我们是否在指定的页面。应该
返回true
如果我们在正确的页面上。这就是为什么我们可以断言我们处于
正确的页面,如下所示:
then:
at CreateMessagePage
errors.contains('This field is required.')
我们在闭包中使用断言,以便我们可以确定哪里出了问题 如果我们来错了页面。 |
接下来,我们创建一个content
关闭,指定
页。我们可以使用 jQuery 式的导航器
API 来选择我们感兴趣的内容。
最后,我们可以验证新消息是否已成功创建,如下所示:
then:
at ViewMessagePage
success == 'Successfully created a new message'
id
date
summary == expectedSummary
message == expectedMessage
有关如何充分利用 Geb 的更多详细信息,请参阅 The Book of Geb 用户手册。