我需要在使用Camel bean組件引用的服務的Grails中編寫生產路徑的單元測試。我的要求是既不改變也不復制現有路線在測試。如何在駱駝生產中模擬Grails服務路徑單元測試
問題是以某種方式模擬服務bean並將其添加到駱駝註冊表。
我能夠在'context.registry.registry'對象上使用'bind'方法來做到這一點。有沒有任何功能可以以更安全的方式來實現?駱駝的版本是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'
}
}
謝謝!這回答了我的問題。以上代碼是安全的,直到JNDI註冊表不會在測試類中更改爲其他內容。用SimpleRegistry覆蓋它就能按預期工作。 – droggo