【发布时间】:2017-09-13 04:35:24
【问题描述】:
我正在使用 javanica 并像这样注释我的 hystrix 命令方法:
@HystrixCommand(groupKey="MY_GROUP", commandKey="MY_COMMAND" fallbackMethod="fallbackMethod")
public Object getSomething(Object request) {
....
我正在尝试对我的后备方法进行单元测试,而不必直接调用它们,即我想调用 @HystrixCommand 带注释的方法并让它在抛出 500 错误后自然地流入后备。这一切都在单元测试之外起作用。
在我的单元测试中,我使用 springs MockRestServiceServer 返回 500 个错误,这部分工作正常,但 Hystrix 在我的单元测试中未正确初始化。在我的测试方法开始时,我有:
HystrixRequestContext context = HystrixRequestContext.initializeContext();
myService.myHystrixCommandAnnotatedMethod();
在此之后,我尝试按键获取任何 hystrix 命令并检查是否有任何已执行的命令但列表始终为空,我正在使用此方法:
public static HystrixInvokableInfo<?> getHystrixCommandByKey(String key) {
HystrixInvokableInfo<?> hystrixCommand = null;
System.out.println("Current request is " + HystrixRequestLog.getCurrentRequest());
Collection<HystrixInvokableInfo<?>> executedCommands = HystrixRequestLog.getCurrentRequest()
.getAllExecutedCommands();
for (HystrixInvokableInfo<?> command : executedCommands) {
System.out.println("executed command is " + command.getCommandGroup().name());
if (command.getCommandKey().name().equals(key)) {
hystrixCommand = command;
break;
}
}
return hystrixCommand;
}
我意识到我在单元测试初始化中遗漏了一些东西,谁能指出我如何正确地进行单元测试的正确方向?
【问题讨论】:
-
嗨@Oscar,您找到解决方案了吗?
-
@StefanoL 不,找不到任何解决方案。我仍然希望有人有办法做到这一点。
-
我曾想过编写单独的测试类,称为 XYZHystrixTest,它实际上是在 Hystrix 就位的情况下部分启动 Spring Context。我没有看到任何其他解决方案来解决这个问题。
-
@StefanoL 测试中的 Hystrix 初始化是我遇到的问题,你是如何解决的?
-
还没有,但基本上它应该在引导(基本)Spring上下文时出现,对吧?
标签: java unit-testing annotations hystrix mockrestserviceserver