Подтвердить что ты не робот

Как я могу выполнить тесты JUnit в случайном порядке?

У меня есть классическая структура для тестов, у меня есть набор тестов из разных комплектов, таких как DatabaseTests, UnitTests и т.д. Иногда эти пакеты содержат другие пакеты, такие как SlowDatabaseTests, FastDatabaseTests и т.д.

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

Если это возможно сделать в Eclipse, это будет лучшим.

4b9b3361

Ответ 1

У вас есть Sortable, но я не вижу, как вы его используете.

Вы можете расширить BlockJUnit4ClassRunner и computeTestMethods() возвращает рандомизированную копию super.computeTestMethods(). Затем используйте @RunWith, чтобы установить это как используемый бегун.

например.

package com.stackoverflow.mlk;

import java.util.Collections;

import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.InitializationError;

public class RandomBlockJUnit4ClassRunner extends BlockJUnit4ClassRunner {

    public RandomBlockJUnit4ClassRunner(Class<?> klass)
            throws InitializationError {
        super(klass);
    }

    protected java.util.List<org.junit.runners.model.FrameworkMethod> computeTestMethods() {
        java.util.List<org.junit.runners.model.FrameworkMethod> methods = super.computeTestMethods();
        Collections.shuffle(methods);
        return methods;
    }

}

Тогда

@RunWith(com.stackoverflow.mlk.RandomBlockJUnit4ClassRunner.class)
public class RandomOrder {
    @Test
    public void one() {
    }

    @Test
    public void two() {
    }

    @Test
    public void three() {
    }
}

Ответ 2

https://github.com/KentBeck/junit/pull/386 вводит некоторые заказы, но не RANDOM. Наверное, вы этого не хотите; тесты должны выполняться детерминистически. Если вам нужно проверить, что разные перестановки тестов все равно проходят, либо проверьте все перестановки; или, если это было бы непрактично медленным, ввести "случайное" семя для перетасовки, которое определяется переменной окружения или тому подобным, чтобы вы могли воспроизвести любые сбои. http://hg.netbeans.org/main/file/66d9fb12e98f/nbjunit/src/org/netbeans/junit/MethodOrder.java дает пример этого для JUnit 3.

Ответ 3

В общем, что вам нужно сделать, это написать свой собственный тестовый бегун, а в классе тестового runner агрегировать методы и произвольно запускать каждый тест (убедитесь, что вы дважды не запускаете тест).

Подробнее о тестовой структуре и о том, как написать свой собственный тестовый бегун здесь: http://www.ddj.com/architect/184415674

Ответ 4

Я буду уверен, что они не зависят от друг друга

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