ConcJUnit is a concurrency-aware version of JUnit that actively supports the developer in writing unit tests for concurrent programs.
The original version of JUnit and other frameworks like TestNG are not effective in testing concurrent programs: Their criteria for success and failure are incorrect, and their design promotes writing bad tests that succeed by default even when they should fail. This makes writing good concurrent tests as hard as writing good concurrent programs.
We have corrected a number of defects of JUnit. The two most important improvements are:
ConcJUnit is designed as a drop-in replacement for JUnit versions 3.8.2 and 4.7. If you are currently using JUnit 4.7, simply replace the original junit-4.2.jar file with our concutest-junit-4.7.jar or concutest-junit-4.7-withrt.jar file.
We recognize the tremendous efforts the creators of the original JUnit have made and in no way claim to have written most of the code. We have only made small improvements, view ConcJUnit as a temporary research framework, and hope that our changes will eventually be merged with the original JUnit. When using ConcJUnit, please also respect JUnit's licensing terms.
To let ConcJUnit warn you about child threads that did end before the main thread but were not joined by the main thread (threads that got "lucky"), please download the concjunitrt.jar and use it to generate a modified Java runtime library (rt.concjunit.jar). Then prefix Java's boot classpath using the -Xbootclasspath/p:rt.concjunit.jar command line option.
More information will be available soon.
Preliminary versions of the ConcJUnit binaries and source code are available
for download here. The downloads that include the Processing Tool (concjunitrt.jar), maked as (withrt) already include the Java Runtime Library Processing Tool, which can be invoked with the