有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Arquillian和TimerService

所以我有一个EJB,它有一个@Schedule注释的方法,我想用arquillian测试它,我可以很容易地直接调用这个方法,但是因为部署是在wildfly上运行的,所以计时器服务启动了,计划的方法将比预期的运行得更多,从而导致测试失败

使用arquillian时,如何禁用计时器服务?或者有没有其他方法来正确测试计时器


共 (2) 个答案

  1. # 1 楼答案

    这是可能的。可以使用@AroundTimeout方法编写拦截器。拦截所有@Schedule和@Timeout方法。在拦截器中,您永远不会继续使用该方法,因此TimerService发出的所有调用都会被阻止

    @Interceptor
    @TimeoutInterceptorBinding
    public class TimerInterceptor {
    
        @AroundTimeout
        public Object disallowTimeoutMethods(InvocationContext context){
            // simply never call context.proceed() => all @Schedule and @Timeout methods are blocked
    
            // return null, because @Schedule and @Timeout methods all have return type void
            return null;
        }
    }
    

    当然,这个拦截器只在测试环境中是活动的,然后如果你想在测试中调用定时方法,你可以很高兴地显式调用它们

  2. # 2 楼答案

    您绝对不应该禁用计时器服务(以及任何其他EJB容器服务)

    最好的方法是放弃直接调用@Schedule方法。这将是侵入性最小的方法