ClassRuleを使用できます
public static class GlobalDataSource extends ExternalResource
private int count = 0;
private DataSource dataSource;
private GlobalDataSource() {};
public static final GlobalDataSource INSTANCE = new GlobalDataSource();
public DataSource get() {
if (dataSource == null) {
throw new IllegalStateException();
}
return dataSource;
}
@Override
protected void before() throws Throwable {
if (count++ == 0) {
dataSource = createDataSource();
}
}
@Override
protected void after() {
if (--count == 0) {
try {
destroyDataSource(dataSource);
} finally {
dataSource = null;
}
}
};
};
テストでは:
@RunWith(JUnit4.class)
public class FooTest {
@ClassRule public static GlobalDataSource source = GlobalDataSource.INSTANCE;
@Test
public void readDataSource() {
...
}
}
次に、スイートを作成します。
@RunWith(Suite.class)
@SuiteClasses(FooTest.class, BarTest.class ...)
public class AllTests {
@ClassRule public static GlobalDataSource source = GlobalDataSource.INSTANCE;
}
テストのグローバル状態は、コードのグローバル状態と同じくらい問題になる可能性があることに注意してください。1つのテストで失敗すると、他のテストも失敗する可能性があります。