锁定老帖子 主题:关于JUNIT的多线程测试问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-09
新启动的线程并不一定都能完全执行 用main就没有问题了 这两个方法,一个通过junit来执行,基本不能保证10次都运行 main方法则十次都能运行的。有没有对junit的多线程测试有接触研究的? 一起探讨啊 @Test public void testMultiThreadRecord() throws RmsException { for (int i = 1; i <= 10; i++) { Worker w = new Worker(); w.start(); } } public static void main(String[] args) { for (int i = 1; i <= 10; i++) { Worker w = new Worker(); w.start(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-09
JUNIT 不支持多线程,有扩展的第三方包,你可以去搜索下
|
|
返回顶楼 | |
发表时间:2008-01-09
使用P-unit吧。即可以确认代码正确,也可以获得代码性能。p-unit兼容junit测试
|
|
返回顶楼 | |
发表时间:2008-01-09
http://p-unit.sourceforge.net/
ok,找到了 多谢 |
|
返回顶楼 | |
发表时间:2008-01-09
呵呵,你可以去看看junit的源代码,junit主线程在最后是执行System.exit(0)来退出的。连jvm一起关闭,当然期间启动的其他线程就都没有办法工作了,jvm都关了有什么办法。
除上面几位的方法外,还有一个简单(当然也比较简陋)的方法,就是在覆盖TestCase的teardown(不知道有没有记错,和setup对应的最后执行的方法),在里面循环Sleep,然后检查是否还有其他活动线程,有就继续sleep,如果其他线程都退出了就跳出循环,让teardown方法退出,之后junit再System.exit(0)。 当然这个方法不是很通用,只适合那种简单的启动一个工作线程干点活就退出的那种情况。 |
|
返回顶楼 | |
发表时间:2008-01-10
上面这位兄台对junit有研究啊
如果类中有private的算法支撑方法,不能被junit引用到 一般测定时候都只写main来测试private方法中的逻辑 兄台是怎么处理的? |
|
返回顶楼 | |
发表时间:2008-01-10
具体分析吧,如果这个private 方法有被其他public方法直接调用,而且逻辑清晰,则直接测试这个public方法。
如果这个private方法隐藏的很深,而且逻辑复杂,其他public方法离这个private的"距离"非常远。那就要考虑一下这个类的设计了,不容易测试的类,往往是功能过多,代码太大的类,建议拆分。 比如一个业务处理类,在复杂的业务逻辑处理过程中通过调用一个private方法做加密,而这个加密算法需要测试。类似这种情况,最好的办法就是将加密算法单独提取出一个类,功能非常单一的类,不要献小。然后对它进行junit测试,原来的类只要直接调用这个类就可以了。 这个也就是junit带来的一个推动力,为了达到测试友好,就必须保证代码清晰,相互耦合小。 |
|
返回顶楼 | |
发表时间:2008-01-10
有道理,可测试性,也是设计的一个目标了... ...
|
|
返回顶楼 | |
发表时间:2008-01-11
用junitperf模擬多線程吧
|
|
返回顶楼 | |
发表时间:2008-01-11
我以前的做法是用thread.join()方法,这样可以保证每个线程都死掉后主线程才继续执行。
不知道有没有什么不对。 |
|
返回顶楼 | |