The tempus-fugit library offers a
ConcurrentRule that can be used to run a test method multiple times and across multiple threads. This can be useful when writing load or soak tests. For example, you might want to sanity check that your synchronisation is working under load. Both rules work use an annotation and can be used independently or together.
To run multiple instances of a single test method in parallel, you annotate the test method with the associated
Concurrent annotation and declare the rule in your test class. For example, you might test the
AtomicInteger class in a similar way to this.
1 2 3 4 5 6 7 8 9 10 11 12
Here, the test method is run in parallel across five threads which may or may not expose potential threading issues. It's not recommended you use this as your only concurrent testing strategy but it may occasionally find a use.
To run a test method multiple times, you can take advantage of the
Repeating annotation and declare the rule in your test class. This is similar to using the
Intermittent annotation but unlike using the
@RunWith mechanism, using the
Rule will not execute any
@After methods between runs. Using
Repeating is also more explicit that you intend to run some kind of load test rather than indicating that a test is intermittently failing.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Concurrent with the
Repeating annotation allows you to run a test method repeatedly and across threads. For example, running the following
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Will repeat the test method ten times in five threads. Each thread will run the test method ten times, so in our example, the counter will be incremented to fifty.