作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要为使用 Camel bean 组件引用的服务的 Grails 中的生产路线编写单元测试。我的要求既不是更改也不是复制测试中的现有路线。
问题是以某种方式模拟 Service bean 并将其添加到 Camel 注册表。
我能够使用 'context.registry.registry' 对象上的 'bind' 方法来做到这一点。是否有任何功能可以以更安全的方式做到这一点? Camel 版本是 2.10,Grails 2.1
路线是:
from('direct:validate').to('bean:camelService?method=echo')
package com
class CamelService {
def echo(text) {
println "text=$text"
text
}
}
package com
import grails.test.mixin.*
import org.apache.camel.builder.RouteBuilder
import org.apache.camel.test.junit4.CamelTestSupport
@TestFor(CamelService)
class RouteTests extends CamelTestSupport {
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from('direct:validate').to('bean:camelService?method=echo')
}
};
}
void testMockBean() throws Exception {
context.registry.registry.bind 'camelService', service
def result = template.requestBody('direct:validate', 'message')
assert result != null
assert result == 'message'
}
}
最佳答案
Camel 允许您插入任何您想要的自定义注册表,并且开箱即用它使用基于 Jndi 的注册表,这就是您可以使用代码示例将服务绑定(bind)到它的原因。另一种方法是使用 SimpleRegistry,它只是一个 Map,因此您可以使用 Map 中的 put 方法将服务放入注册表。然后,您需要覆盖 CamelTestSupport 类中的 createCamelContext 方法,并
将 SimpleRegistry 传递给 DefaultCamelContext 的构造函数。
无论如何,只要您使用非 Spring CamelTestSupport 类,您的代码就是安全的,因为它使用了开箱即用的基于 JNDI 的注册表。如果您使用 CamelSpringTestSupport,那么它是一个基于 spring 的注册表,您需要使用 spring 应用程序上下文将您的 bean 添加到其中。
关于grails - 如何在 Camel 生产路线单元测试中模拟 Grails 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141132/
我是一名优秀的程序员,十分优秀!