所以我有一个带有@Schedule注释方法的EJB,我想用arquillian测试它,我可以很容易地直接调用这个方法,但是因为部署是在wildfly上运行的,所以启动了计时器服务,预定的方法将运行超过预期导致测试失败。
使用arquillian时如何禁用定时器服务?或者是否有其他方法来正确测试计时器
答案 0 :(得分:0)
您绝对不应该禁用计时器服务(以及任何其他EJB容器服务)。
恕我直言,最好的方法是放弃直接调用@Schedule
方法。这将是最不具侵入性的方法。
答案 1 :(得分:0)
这是可能的。您可以使用 @AroundTimeout 方法编写拦截器。拦截所有@Schedule 和@Timeout 方法。在拦截器中,您根本不会继续执行该方法,因此 TimerService 进行的所有调用都被阻止。
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=f2928841af169e69c72faf282f04390b
这个拦截器当然只在测试环境中处于活动状态,然后你可以愉快地明确调用定时方法,如果你想在你的测试中使用它们。