【发布时间】:2023-03-06 04:34:01
【问题描述】:
我在类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(在other 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 中的答案可能是一个更好的做法,
但我不能完全按照这些例子。
如何使用 Mockito 工具为使用回调的方法编写单元测试?
谢谢。
【问题讨论】:
-
this question and answer 是否涵盖您正在寻找的案例?
-
嗨,杰夫。谢谢。您在这里喜欢的解决方案和示例是用于返回回调的模拟。我需要创建一个测试异步方法的单元测试。模拟我想要测试的服务并创建回调不是我想要的。
-
感谢您发布有问题的完整代码,我真的需要这个,因为我是新雇用的 Android SDET :)
标签: java unit-testing callback mockito