Чтение файлов с помощью Intellij idea IDE

Если вы не хотите создавать набор и должны перечислять все свои тестовые классы, вы можете использовать отражение, чтобы динамически находить число тестовых классов и считать в базовом классе @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 может делать то, что вы хотите.

24
задан MTCoster 29 November 2018 в 18:17
поделиться