Junit to test concurrency

concurrency, java, junit

Solution

JUnitPerf uses RepeatedTest to test concurrent code so it seems reasonable to use it to do the same thing with your test above, see:

http://www.clarkware.com/software/JUnitPerf.html

There are other methods for unit testing concurrent code, although none of them can really verify that your code is thread safe:

- Concurrent Runner

- ConcJunit

Also see: Unit Testing Concurrent Code

Problem

I'm trying to test java.util.concurrent.ConcurrentLinkedQueue when accessed via multiple threads. Mentioned below is my Junit test using RepeatedTest to run in two concurrent threads. My questions is: is it correct to use RepeatedTest to test concurrency for example on ConcurrentLinkedQueue? The source code is mentioned below. Thanks ``` 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); } ```

Original source

Related problems