Если вы не хотите создавать набор и должны перечислять все свои тестовые классы, вы можете использовать отражение, чтобы динамически находить число тестовых классов и считать в базовом классе @AfterClass, чтобы сделать tearDown только один раз:
public class BaseTestClass
{
private static int testClassToRun = 0;
// Counting the classes to run so that we can do the tear down only once
static {
try {
Field field = ClassLoader.class.getDeclaredField("classes");
field.setAccessible(true);
@SuppressWarnings({ "unchecked", "rawtypes" })
Vector classes = (Vector) field.get(BlockJUnit4ClassRunner.class.getClassLoader());
for (Class> clazz : classes) {
if (clazz.getName().endsWith("Test")) {
testClassToRun++;
}
}
} catch (Exception ignore) {
}
}
// Setup that needs to be done only once
static {
// one time set up
}
@AfterClass
public static void baseTearDown() throws Exception
{
if (--testClassToRun == 0) {
// one time clean up
}
}
}
Если вы предпочитаете использовать @BeforeClass вместо статических блоков, вы также можете использовать булевский флаг для выполнения подсчета отражения и тестирования только один раз при первом вызове. Надеюсь, что это кому-то помогает, мне понадобился день, чтобы лучше понять, чем перечислять все классы в пакете.
Теперь вам нужно расширить этот класс для всех ваших тестовых классов. У нас уже был базовый класс, чтобы предоставить некоторые общие вещи для всех наших тестов, поэтому это было лучшее решение для нас.
Вдохновение происходит из этого ответа SO https://stackoverflow.com/a/ 37488620/5930242
Если вы не хотите распространять этот класс повсюду, этот последний ответ SO может делать то, что вы хотите.