我需要为使用 Camel bean 组件引用的服务的 Grails 中的生产路线编写单元测试。我的要求既不是更改也不是复制测试中的现有路线。
问题是以某种方式模拟 Service bean 并将其添加到 Camel 注册表。
我能够使用 'context.registry.registry' 对象上的 'bind' 方法来做到这一点。是否有任何功能可以以更安全的方式做到这一点?Camel 版本是 2.10,Grails 2.1
路线是:
from('direct:validate').to('bean:camelService?method=echo')
CamelService 只是一个简单的类:
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'
}
}