思路:我们可以利用ArgumentCaptor
捕捉到传递给RpcServicde
的接口实现类,之后为手动调用接口实现类的onSuccess
方法,模拟异步回调的场景。代码如下:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {AsyncService.class})
public class AsyncServiceTest {
@MockBean
private RpcService rpcService;
@MockBean
private PushService pushService;
@Autowired
private AsyncService asyncService;
@Test
public void testAsyncSend_method1() {
asyncService.asyncSend();
ArgumentCaptor<IAsyncHandler> argumentCaptor = ArgumentCaptor.forClass(IAsyncHandler.class);
Mockito.verify(rpcService).doHandle(argumentCaptor.capture());
IAsyncHandler asyncHandler = argumentCaptor.getValue();
asyncHandler.onSuccess("true");
Mockito.verify(pushService).method1();
Mockito.verify(pushService, Mockito.never()).method2();
@Test
public void testAsyncSend_method2() {
asyncService.asyncSend();
ArgumentCaptor<IAsyncHandler> argumentCaptor = ArgumentCaptor.forClass(IAsyncHandler.class);
Mockito.verify(rpcService).doHandle(argumentCaptor.capture());
IAsyncHandler asyncHandler = argumentCaptor.getValue();
asyncHandler.onSuccess("false");
Mockito.verify(pushService).method2();
Mockito.verify(pushService, Mockito.never()).method1();
通过利用ArgumentCaptor
捕捉到异步回调时会调用的类,手动给调用类进行赋值,进行异步回调场景的测试覆盖。
使用 ArgumentCaptor 对异步回调的方法进行单元测试背景博主在近期工作中,对模块进行异步化修改,主要进行RPC调用时,不再进行同步等待。对代码完成修改后,需要进行单元测试覆盖,其中就包括了异步回调的单元测试覆盖。由于涉及业务代码,这里对场景进行简化,即需要对异步回调的场景进行单元测试。这里通过代码模拟一个简单的场景:首先是有一个接口类IAsyncHanlder的接口,定义了onSucess方法。public interface IAsyncHandler { void onS.
支持回调的Lambda处理程序使用典型的Node.js异步签名:
exports . handler = function ( event , context , callback ) {
callback ( null , 'success!' ) ;
工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的场景, 这时候就需要使用线程了.
一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线程的流程, 往往需要让主线程指定后, 等待子线程的完成. 这里有几种方式.
站在主线程的角度, 我们可以分为主动式和被动式.
主动式指主线程主动去检测某个.
在XCode6以上版本中,苹果添加了用于异步回调测试的api,因此不用像旧版本那样,发起异步调用后通过循环查询标志位,来检查异步回调函数的调用了。
在新版本中直接使用XCTestExpectation的API即可实现这一功能。首先来看一下官方文档中的代码片段:- (void)testDocumentOpening
// 创建一个expectation对象
XCTestExpec
回调函数的嵌套Writing unit tests can be fun but also tricky, especially if you’re testing code that may not have been written with unit testing in mind. 编写单元测试可能很有趣,但也很棘手,特别是如果您要测试的代码可能没有考虑到单元测试的情况。
One sce...
链接:https://www.zhihu.com/question/449470796/answer/1781246366
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
编写Java单元测试用例,其实就是把“复杂的问题要简单化”——即把一段复杂的代码拆解成一系列简单的单元测试用例;写好Java单元测试用例,其实就是把“简单的问题要深入化”——即学习一套方法、总结一套模式并应用到实践中。这里,作者根据日常的工作经验,总结了一些Java单元测试技巧,以供.