我在Logic类中有以下方法:
public class Logic implements ILogic {
@Override
public void doSomethingInterestingAsync(final int number,
final ICallback callback){
new Thread(new Runnable() {
@Override
public void run() {
callback.response(number+1);
}
}).start();
}
}
我通常使用以下方式来调用它:
ILogic.doSomethingInterestingAsync(1, new ICallback() {
@Override
public void response(int number) {
System.out.println(String.format("response - %s", number));
}
});
现在我想对它进行单元测试。
所以我找到了一个解决方案,使用CountDownLatch(在其他 SO线程中找到)。
如下所示:
@Test
public void testDoSomethingInterestingAsync_CountDownLatch() throws Exception {
final CountDownLatch lock = new CountDownLatch(1);
ILogic ILogic = new Logic();
final int testNumber = 1;
ILogic.doSomethingInterestingAsync(testNumber, new ICallback() {
@Override
public void response(int number) {
assertEquals(testNumber + 1, number);
lock.countDown();
}
});
assertEquals(true, lock.await(10000, TimeUnit.MILLISECONDS));
}
它非常好用。
但我也读到过,使用Mockito中的Answer可能是更好的实践方式,
但我无法完全理解示例。
我如何使用Mockito工具为使用回调的方法编写单元测试?
谢谢。