If you allocate expensive external resources in a {@link org.junit.BeforeClass} method you need to release them
after all the tests in the class have run. Annotating a <code>public static void</code> method
with <code>@AfterClass</code> causes that method to be run after all the tests in the class have been run. All <code>@AfterClass</code>
methods are guaranteed to run even if a {@link org.junit.BeforeClass} method throws an
exception. The <code>@AfterClass</code> methods declared in superclasses will be run after those of the current
class, unless they are shadowed in the current class.
<p>
Here is a simple example:
<pre>
public class Example {
private static DatabaseConnection database;
@BeforeClass public static void login() {
database= ...;
}
@Test public void something() {
...
}
@Test public void somethingElse() {
...
}
@AfterClass public static void logout() {
database.logout();
}
}
</pre>
If you allocate expensive external resources in a {@link org.junit.BeforeClass} method you need to release them after all the tests in the class have run. Annotating a <code>public static void</code> method with <code>@AfterClass</code> causes that method to be run after all the tests in the class have been run. All <code>@AfterClass</code> methods are guaranteed to run even if a {@link org.junit.BeforeClass} method throws an exception. The <code>@AfterClass</code> methods declared in superclasses will be run after those of the current class, unless they are shadowed in the current class. <p> Here is a simple example: <pre> public class Example { private static DatabaseConnection database; @BeforeClass public static void login() { database= ...; } @Test public void something() { ... } @Test public void somethingElse() { ... } @AfterClass public static void logout() { database.logout(); } } </pre>