Простой способ запустить тот же junit тест много раз?

Алгоритмы, представляемые здесь, кажется, мне делают больше вычислений, чем я думаю, необходимы. Я не протестировал это, но я думаю, что это работало бы:

Первоначально, отметьте все пиксели, как освещенный.

Для каждого пикселя на краю карты: Как предложенное Паукообразное насекомое, используйте Bresenham для трассировки строки от пикселя до света. Если та строка ударяет, что преграда тогда отмечает все пиксели от края до только вне преграды, как являющейся в тени.

112
задан Stefan Thyberg 29 September 2009 в 14:20
поделиться

4 ответа

Самый простой (по крайней мере, требуемый объем нового кода) способ сделать это - запустить тест как параметризованный (пометьте @RunWith (Parameterized.class) и добавьте метод для предоставления 10 пустых параметров). Таким образом, фреймворк будет запускать тест 10 раз.

Этот тест должен быть единственным тестом в классе, или, лучше сказать, все методы тестирования должны быть выполнены 10 раз в классе.

Вот пример:

@RunWith(Parameterized.class)
public class RunTenTimes {

    @Parameterized.Parameters
    public static Object[][] data() {
        return new Object[10][0];
    }

    public RunTenTimes() {
    }

    @Test
    public void runsTenTimes() {
        System.out.println("run");
    }
}

С вышеупомянутым можно даже сделать это с помощью конструктора без параметров, но я не уверен, предполагали ли это авторы фреймворка, или это сломается в будущем.

Если вы реализуют свой собственный бегун, тогда вы можете запустить тест 10 раз. Если вы используете сторонний раннер, то с 4.7, вы можете использовать новую аннотацию @Rule и реализовать интерфейс MethodRule , чтобы он принимал оператор и выполнял его 10 раз в цикле for. Текущий недостаток этого подхода заключается в том, что @Before и @After запускаются только один раз. Это, вероятно, изменится в следующей версии JUnit ( @Before будет запускаться после @Rule ), но независимо от того, вы будете действовать с одним и тем же экземпляром объекта (что-то, что неверно для параметризованного бегуна). Это предполагает, что какой бы бегун вы ни запускали класс, правильно распознает аннотации @Rule . Это только в том случае, если он делегируется бегунам JUnit.

Если вы работаете с пользовательским бегуном, который не распознает аннотацию @Rule , то вы действительно застряли в необходимости писать свой собственный бегун, который надлежащим образом делегирует этому бегуну и запускает его 10 раз.

Обратите внимание, что есть и другие способы решения этой проблемы (например, бегун Теорий), но все они требуют бегуна. К сожалению, JUnit в настоящее время не поддерживает уровни бегунов. Это бегун, который цепляет других бегунов.

118
ответ дан 24 November 2019 в 02:45
поделиться

Я обнаружил, что повторная аннотация Spring полезна для такого рода вещей:

@Repeat(value = 10)

Последняя версия (Spring Framework 4.3.11.RELEASE API) doc:

61
ответ дан 24 November 2019 в 02:45
поделиться

Что-то не так с:

@Test
void itWorks() {
    // stuff
}

@Test
void itWorksRepeatably() {
    for (int i = 0; i < 10; i++) {
        itWorks();
    }
}

В отличие от случая, когда вы тестируете каждый из массивов значений, вам не особенно важно, какой запуск завершился неудачно.

Нет необходимости делать в конфигурации или аннотации то, что можно делать в коде.

11
ответ дан 24 November 2019 в 02:45
поделиться

В библиотеке tempus-fugit есть прерывистая аннотация, которая работает с JUnit 4.7 @Rule для повторения теста несколько раз или с @RunWith .

Например,

@RunWith(IntermittentTestRunner.class)
public class IntermittentTestRunnerTest {

   private static int testCounter = 0;

   @Test
   @Intermittent(repition = 99)
   public void annotatedTest() {
      testCounter++;
   }
}

После запуска теста (с IntermittentTestRunner в @RunWith ), testCounter будет равно 99 .

7
ответ дан 24 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: