假设我在单独的RouteBuilder类中创建了我的路由.看起来像:
我想在没有JMS代理和没有DB的情况下对这条路线进行单元测试.我知道我可以模拟我的处理器实现,但这还不够.我不想改变这条路线(假设我在jar文件中得到了这个类).据我所知,从Camel in Action(第6.2.6节)中,为了能够使用端点和其他东西的模拟,我需要更改我的路由端点定义(在本书的示例中,这是"mina:tcp:/"的更改/ miranda"to"mock:miranda"etc).
是否可以在不改变路径定义的情况下完全隔离测试流量?如果我将RouteBuilder作为一个单独的类,我是否被迫以某种方式"复制"路由定义并手动更改它?是不是测试了错误的东西?
我对Camel很新,对我而言,能够在发布路线时进行隔离单元测试真的很酷.只是为了能够改变一些东西,运行小测试,观察结果等等.
我正在编写程序参数解析器,只是为了在TDD中变得更好,我坚持以下问题.说我的解析器定义如下:
class ArgumentsParser {
public ArgumentsParser(ArgumentsConfiguration configuration) {
this.configuration = configuration;
}
public void parse(String[] programArguments) {
// all the stuff for parsing
}
}
Run Code Online (Sandbox Code Playgroud)
我想像ArgumentsConfiguration一样实现:
class ArgumentsConfiguration {
private Map<String, Class> map = new HashMap<String, Class>();
public void addArgument(String argName, Class valueClass) {
map.add(argName, valueClass);
}
// get configured arguments methods etc.
}
Run Code Online (Sandbox Code Playgroud)
这是我目前的阶段.目前在测试中我使用:
@Test
public void shouldResultWithOneAvailableArgument() {
ArgumentsConfiguration config = prepareSampleConfiguration();
config.addArgument("mode", Integer.class);
ArgumentsParser parser = new ArgumentsParser(configuration);
parser.parse();
// ....
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这样的方式是否正确?我的意思是,在测试中使用真正的ArgumentsConfiguration是否可以?或者我应该嘲笑它?默认(当前)实现非常简单(只是包装Map),但我想它可能更复杂,比如从数据源类型中获取配置.那么模仿这种"昂贵"的行为是很自然的.但这里有什么首选方式?
编辑:也许更清楚:我是否应该模拟ArgumentsConfiguration,即使没有编写任何实现(只需定义其公共方法),使用mock进行测试并稍后处理实际实现,或者我应该在测试中使用最简单的实现,并让它们间接地涵盖这个实现.但如果是这样,那么测试后面提供的另一个配置实现呢?