01Junit不适合多线程并发测试

package com.test5;

import junit.framework.TestCase;

public class BadExampleTest extends TestCase {
	private Runnable runnable;

	public class DelayedHello implements Runnable {
		private int count;
		private Thread worker;

		private DelayedHello(int count) {
			this.count = count;
			worker = new Thread(this);
			worker.start();
		}

		public void run() {
			try {
				Thread.sleep(count);
				System.out.println("Delayed Hello World");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public void testExampleThread() throws Throwable {
		System.out.println("Hello, World"); // 1
		runnable = new DelayedHello(5000); // 2
		System.out.println("Goodbye, World"); // 3
	}

	public static void main(String[] args) {
		String[] name = { BadExampleTest.class.getName() };
		junit.textui.TestRunner.main(name);
	}

}

 如果你运行这个测试类,你会注意到一些错误。TextHellWorld()方法像你期望的那样运行和结束。它没有发出任何有关线程的异常,但是你却不会接受到来自线程的返回信息。注意,你不会看到“Delayed Hello World”。为什么?因为线程还在激活状态的时候,Junit已经执行完成。问题发生在下面这行,使线程执行结束的时候,你的测试不能反映出它的执行结果。这个问题行是在Junit的TestRunner中。它没有被设计成搜寻Runnable实例,并且等待这些线程发出报告,它只是执行它们并且忽略了它们的存在。因为这个原因,几乎不可能在Junit中编写和维护多线程的单元测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值