We have recently switched to evaluating student submissions using statement level code coverage (as opposed to method level coverage) and JUnit 3 won't permit 100% coverage of a test case when an exception is thrown. i.e. in the JUnit 3 example below, the line "fail()" won't be executed and hence will reduce coverage percentage. But, in the JUnit 4 example, they'll get 100% coverage. In addition, JUnit 4 is just simpler in these cases.