如何对异步调用进行单元测试

10-01-22 wlmouse

今天需要对一个类进行单元测试。

这个类本身实现Runnable接口,类的构造方法里启动一个该类的线程。

类里面有一个队列,Run方法会检查队列里是否有数据,有数据则进行处理。但是我现在发现我难以对这个类进行单元测试。

我无法对处理这部分代码(也就是Run方法里面的代码)进行测试,因为我无法控制它何时执行。

请问应该如何编写单元测试代码呢?

banq
2010-01-22 13:45

异步是一种解耦方式,比如A异步调用B: A ---> B ,那么分别对B和A进行单元测试即可。

wlmouse
2010-01-22 23:20

实际上我是在自己尝试实现一个简单的Domain Event。我的异步事件管理器里有一个队列,Domain的事件会被放到里面。事件管理器本身是一个独立的线程。它的run方法里面会不断循环查询队列里面是否有事件。有事件就拿出来,然后由监听器进行处理。

我需要测试的就是这部分代码。向管理器发送事件是一个线程,而管理器有自己的线程。所以我无法在JUnit的测试里面获得管理器是否调用了监听器处理事件。

banq
2010-01-23 09:51

2010年01月22日 23:20 "wlmouse"的内容
所以我无法在JUnit的测试里面获得管理器是否调用了监听器处理事件。

你通过监听器输出内容判定可以判定。