I am using javanica and annotating my hystrix command methods like this:
@HystrixCommand(groupKey="MY_GROUP", commandKey="MY_COMMAND" fallbackMethod="fallbackMethod")
public Object getSomething(Object request) {
....
And I am trying to unit tests my fallback methods, without having to call them directly, i.e. I would like to call the @HystrixCommand
annotated method and let it flow naturally into the fallback after throwing a 500 error. This all works outside of unit tests.
In my unit tests I am using springs MockRestServiceServer
to return 500 errors, this part is working, but Hystrix is not being initialized correctly on my unit tests. At the beginning of my test method I have:
HystrixRequestContext context = HystrixRequestContext.initializeContext();
myService.myHystrixCommandAnnotatedMethod();
After this I am trying to get any hystrix command by key and checking if there are any executed commands but the list is always empty, I am using this method:
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;
}
I realize I am missing something in my unit tests initialization, can anyone point me in the right direction on how I can properly unit-test this?