arquillianとwilfdlyサーバーでjmsをテストしています。ここでは簡単なテストがあります:Arquillianテストでそのメソッドが呼び出されたかどうかを確認する方法
@RunWith(Arquillian.class)
public class PubSubMdbAsyncJmsTest {
public static final String MESSAGE_1 = "Test message1";
@Inject
PubSubProducer pubSubProducer;
final AtomicBoolean hasBeenInvoked = new AtomicBoolean(false);
@Produces
public Function<String, Void> messageConsumer() {
return new Function<String, Void>() {
@Override
public Void apply(final String message) {
Assert.assertEquals(MESSAGE_1, message);
hasBeenInvoked.set(true);
return null;
}
};
}
@Deployment
public static JavaArchive createDeployment() {
JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
.addClass(PubSubProducer.class)
.addClass(MdbConsumer.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
System.out.println(jar.toString(true));
return jar;
}
/*
*/
@Test
public void testSendMessageAndConsumeItSuccessfully() throws InterruptedException {
pubSubProducer.sendMessage(MESSAGE_1);
TimeUnit.SECONDS.wait(5);
Assert.assertTrue(hasBeenInvoked.get());
}
}
テストはarquillianとwilfdlyで実行されます。 Assert.assertTrue(hasBeenInvoked.get());
チェックに失敗します。あなたは(例外をスロー追加)に機能を変更する場合:
@Produces
public Function<String, Void> messageConsumer() {
return new Function<String, Void>() {
@Override
public Void apply(final String message) {
Assert.assertEquals(MESSAGE_1, message);
if(true) throw new RuntimeException(message);
hasBeenInvoked.set(true);
return null;
}
};
}
あなたは正しいメッセージ(「Test message1
」)でこれにRuntimeExceptionが表示されます。つまり、apply
メソッドが呼び出されたことを意味します。 hasBeenInvoked
がまだ偽である理由は明確ではありませんか?
生成されたFunctionはMDB Beanで使用されており、このBeanの実装は必要ないと思います。私が言ったように、あなたが例外をスローするとすぐに、そのメソッドが呼び出されるのを見ることができます。質問は、最後の主張がテストで失敗した理由は何ですか?
代わりに、おそらくapply
メソッドが呼び出されたかどうかをmockitoで調べることができますが、この場合どのように使用できますか?