doc/ReleaseNotes4.5.md
junit-4.5.jar, which contains all the classes
necessary to run JUnit, and junit-dep-4.5.jar, which leaves out
hamcrest classes, for developers who already use hamcrest outside of
JUnit.JUnitCore now more often exits with the correct exit code (0 for success, 1 for failure)
Badly formed test classes (exceptions in constructors, classes without tests, multiple constructors, Suite without @SuiteClasses) produce more helpful error messages
Test classes whose only test methods are inherited from superclasses now run.
Optimization to annotation processing can cut JUnit overhead by more than half on large test classes, especially when using Theories. [Bug 1796847]
A failing assumption in a constructor ignores the class
Correct results when comparing the string "null" with potentially null values. [Bug 1857283]
Annotating a class with @RunWith(JUnit4.class) will always invoke the
default JUnit 4 runner in the current version of JUnit. This default changed
from JUnit4ClassRunner in 4.4 to BlockJUnit4ClassRunner in 4.5 (see below),
and may change again.
BlockJUnit4Runner is a new implementation of the standard JUnit 4
test class functionality. In contrast to JUnit4ClassRunner (the old
implementation):
BlockJUnit4Runner has a much simpler implementation based on
Statements, allowing new operations to be inserted into the
appropriate point in the execution flow.
BlockJUnit4Runner is published, and extension and reuse are
encouraged, whereas JUnit4ClassRunner was in an internal package,
and is now deprecated.
ParentRunner is a base class for runners that iterate over
a list of "children", each an object representing a test or suite to run.
ParentRunner provides filtering, sorting, @BeforeClass, @AfterClass,
and method validation to subclasses.
TestClass wraps a class to be run, providing efficient, repeated access
to all methods with a given annotation.
The new RunnerBuilder API allows extending the behavior of
Suite-like custom runners.
AssumptionViolatedException.toString() is more informative
Parameterized.eachOne() has been removed
New runner Enclosed runs all static inner classes of an outer class.
@Before and @After methods are run before and after each set of attempted parameters
on a Theory, and each set of parameters is run on a new instance of the test class.
Exposed API's ParameterSignature.getType() and ParameterSignature.getAnnotations()
An array of data points can be introduced by a field or method
marked with the new annotation @DataPoints
The Theories custom runner has been refactored to make it faster and easier to extend
Source has been split into directories src/main/java and
src/test/java, making it easier to exclude tests from builds, and
making JUnit more maven-friendly
Test classes in org.junit.tests have been organized into
subpackages, hopefully making finding tests easier.
ResultMatchers has more informative descriptions.
TestSystem allows testing return codes and other system-level interactions.