jav*_*ill 6 java concurrency junit
我正在尝试通过多个线程访问java.util.concurrent.ConcurrentLinkedQueue.下面提到的是使用RepeatedTest在两个并发线程中运行的Junit测试.我的问题是:在ConcurrentLinkedQueue上使用RepeatedTest测试并发性是否正确?源代码如下所述.
谢谢
import java.util.concurrent.ConcurrentLinkedQueue;
import junit.extensions.ActiveTestSuite;
import junit.extensions.RepeatedTest;
import junit.extensions.TestSetup;
import junit.framework.TestCase;
public class TestNonBlockingConcurrentQueue extends TestCase{
private static ConcurrentLinkedQueue clq;
public void testPut() throws Exception {
int messageCounter = 0;
for(;messageCounter <10000; messageCounter++){
clq.offer(messageCounter);
}
assertEquals(clq.size(), messageCounter);
}
public void testGet() throws Exception {
while(!clq.isEmpty()){
clq.poll();
}
assertEquals("Size should be zero", clq.size(), 0);
}
public static junit.framework.Test suite( ) {
ActiveTestSuite ats = new ActiveTestSuite();
TestSetup setup = new TestSetup(ats) {
protected void setUp() throws Exception {
System.out.println("Creating ConcurrentLinkedQueue..");
clq = new ConcurrentLinkedQueue();
}
protected void tearDown( ) throws Exception {
clq = null;
}
};
ats.addTest(new RepeatedTest(new TestNonBlockingConcurrentQueue("testPut"), 2));
ats.addTest(new RepeatedTest(new TestNonBlockingConcurrentQueue("testGet"), 2));
return setup;
}
public TestNonBlockingConcurrentQueue(String testName){
super(testName);
}
Run Code Online (Sandbox Code Playgroud)
JUnitPerf使用RepeatedTest来测试并发代码,因此使用它来对上面的测试执行相同的操作似乎是合理的,请参阅:
http://www.clarkware.com/software/JUnitPerf.html
还有其他单元测试并发代码的方法,尽管它们都不能真正验证您的代码是否是线程安全的:
另请参阅:单元测试并发代码