在 Geb 功能测试中使用服务 bean 和依赖注入
Using service beans and dependency Injection in Geb Functional Tests
我想在我的 Geb 测试中使用一个服务来填充一些示例数据。示例数据庞大且复杂,我们已经编写了代码来为其他控制器和服务创建它。因此,一个简单的模拟是不可能的。如何在我的 Geb 测试中访问此服务?
假设我的服务名称是 testDataService,看起来像这样...
class TestDataService {
def otherService
void importData() {
otherService.getData()
}
}
像 Geb 中的以下内容是理想的...
class testSpec extends GebReportingSpec {
@Shared def testDataService
def setupSpec() {
testDataService.importData()
}
def test1() {
...some test...
}
}
据我了解,这应该适用于正常的集成测试。由于它是功能测试,因此情况大不相同,它 returns 为空。
我发现了很多关于 Grails Remote Control 插件的建议,但我想知道没有它如何做到这一点。
一些旁注...
服务 class 位于 src/groovy 内。虽然我确信我正确地连接了它,因为它在被其他服务调用时按预期工作。仅在功能测试中不起作用。
Grails 版本:2.4.5
Geb 0.10.0
有远程控制插件:http://grails.org/plugin/remote-control; instructions are on https://github.com/alkemist/grails-remote-control/
您将在您的测试中添加一个 RemoteControl
实例并在您的测试中添加 运行 remote.call{ /* server side code */ }
(注意这必须 return 可序列化的东西)。
在 grails 的功能测试中,您基本上不再参与所有 IoC 和 grails 魔法;您将被视为与服务器交互的普通客户端。
对于 Grails 2.4.5
def testDataService = Holders.applicationContext.getBean("testDataService")
因此我们的测试规范可能如下所示...
class testSpec extends GebReportingSpec {
@Shared def testDataService = Holders.applicationContext.getBean("testDataService")
def setupSpec() {
testDataService.importData()
}
def test1() {
...some test...
}
}
请注意,所有来自其他服务的注入依赖项都应该存在。
我想在我的 Geb 测试中使用一个服务来填充一些示例数据。示例数据庞大且复杂,我们已经编写了代码来为其他控制器和服务创建它。因此,一个简单的模拟是不可能的。如何在我的 Geb 测试中访问此服务?
假设我的服务名称是 testDataService,看起来像这样...
class TestDataService {
def otherService
void importData() {
otherService.getData()
}
}
像 Geb 中的以下内容是理想的...
class testSpec extends GebReportingSpec {
@Shared def testDataService
def setupSpec() {
testDataService.importData()
}
def test1() {
...some test...
}
}
据我了解,这应该适用于正常的集成测试。由于它是功能测试,因此情况大不相同,它 returns 为空。
我发现了很多关于 Grails Remote Control 插件的建议,但我想知道没有它如何做到这一点。
一些旁注...
服务 class 位于 src/groovy 内。虽然我确信我正确地连接了它,因为它在被其他服务调用时按预期工作。仅在功能测试中不起作用。
Grails 版本:2.4.5
Geb 0.10.0
有远程控制插件:http://grails.org/plugin/remote-control; instructions are on https://github.com/alkemist/grails-remote-control/
您将在您的测试中添加一个 RemoteControl
实例并在您的测试中添加 运行 remote.call{ /* server side code */ }
(注意这必须 return 可序列化的东西)。
在 grails 的功能测试中,您基本上不再参与所有 IoC 和 grails 魔法;您将被视为与服务器交互的普通客户端。
对于 Grails 2.4.5
def testDataService = Holders.applicationContext.getBean("testDataService")
因此我们的测试规范可能如下所示...
class testSpec extends GebReportingSpec {
@Shared def testDataService = Holders.applicationContext.getBean("testDataService")
def setupSpec() {
testDataService.importData()
}
def test1() {
...some test...
}
}
请注意,所有来自其他服务的注入依赖项都应该存在。