How to run concurrency unit test

How to run concurrency unit test

public class MessageBoard

{

    public synchronized void postMessage(String message)

    {

        ....

    }


    public void updateMessage(Long id, String message)

    {

        ....

    }

}

Process running[] = new Process[5];

for (int i = 0; i < 5; i++) {

 ProcessBuilder b = new ProcessBuilder("java -cp " + getCP() + " MyTestRunner");

 running[i] = b.start();

}


for(int i = 0; i < 5; i++) {

 running[i].waitFor();

}

public void testMesageBoard() {

 final MessageBoard b = new MessageBoard();


 int n = 5;

 Thread T[] = new Thread[n];

 for (int i = 0; i < n; i++) {

  T[i] = new Thread(new Runnable() {

   public void run() {

    for (int j = 0; j < maxIterations; j++) {

      Thread.sleep( random.nextInt(50) );

      b.postMessage(generateMessage(j));

      verifyContent(j); // put some assertions here

    }

   }

  });


  PerfTimer.start();

  for (Thread t : T) {

   t.start();

  }


  for (Thread t : T) {

   t.join();

  }

  PerfTimer.stop();

  log("took: " + PerfTimer.elapsed());

 }

}**strong text**

public static Test suite()

{

    TestSuite suite = new ActiveTestSuite();

    suite.addTestSuite(PostMessageTest.class);

    suite.addTestSuite(PostMessageTest.class);

    suite.addTestSuite(PostMessageTest.class);

    suite.addTestSuite(PostMessageTest.class);

    suite.addTestSuite(PostMessageTest.class);

    return suite;

}

import com.mycila.junit.concurrent.ConcurrentJunitRunner;

import com.mycila.junit.concurrent.Concurrency;


@RunWith(ConcurrentJunitRunner.class)

@Concurrency(6)

public final class ATest {

...

import com.mycila.junit.concurrent.ConcurrentSuiteRunner;


@RunWith(ConcurrentSuiteRunner.class)

@Suite.SuiteClasses({ATest.class, ATest2.class, ATest3.class})

public class MySuite {

}

<dependency>

    <groupId>com.mycila</groupId>

    <artifactId>mycila-junit</artifactId>

    <version>1.4.ga</version>

</dependency>

@Test

public final void runConcurrentMethod() throws InterruptedException {

    ExecutorService exec = Executors.newFixedThreadPool(16);

    for (int i = 0; i < 10000; i++) {

        exec.execute(new Runnable() {

             @Override

             public void run() {

                 concurrentMethod();

             }

        });

    }

    exec.shutdown();

    exec.awaitTermination(50, TimeUnit.SECONDS);

}


private void concurrentMethod() {

    //do and assert something

}


Learn More :