Группировка тесты JUnit

У меня такое ощущение, что ты немного усложнил это. Поскольку строковая строка установлена ​​статически, вам будет проще сделать следующее:

# Sets the characters for the letters in the consistency of the word
letter-one = "h"
letter-two = "e"
letter-three = "l"
letter-four = "l"
letter-six = "o"
letter-7 = " "
letter-8 = "w"
letter-9 = "o"
letter-10 = "r"
letter11 = "l"
lettertwelve = "d"

# Tells the python which of the character letters that you want to have on the print screen
print(letter-three + letter-7 + letter-three)

Таким образом, его будет гораздо легче читать пользователям, и это должно уменьшить вашу ошибку.

41
задан osipxd 2 January 2018 в 20:37
поделиться

3 ответа

Do you want to group tests inside a test class or do you want to group test classes? I am going to assume the latter.

It depends on how you are running your tests. If you run them by Maven, it is possible to specify exactly what tests you want to include. See the Maven surefire documentation for this.

More generally, though, what I do is that I have a tree of test suites. A test suite in JUnit 4 looks something like:

 @RunWith(Suite.class)
 @SuiteClasses({SomeUnitTest1.class, SomeUnitTest2.class})
 public class UnitTestsSuite {
 }

So, maybe I have a FunctionTestsSuite and a UnitTestsSuite, and then an AllTestsSuite which includes the other two. If you run them in Eclipse you get a very nice hierarchical view.

The problem with this approach is that it's kind of tedious if you want to slice tests in more than one different way. But it's still possible (you can for example have one set of suites that slice based on module, then another slicing on the type of test).

8
ответ дан 27 November 2019 в 00:22
поделиться

You can create test Suite objects that contain groups of tests. Alternatively, your IDE (like Eclipse) may have support for running all the tests contained in a given package.

1
ответ дан 27 November 2019 в 00:22
поделиться

Для обработки их глобального отключения у JUnit (4.5+) есть два способа. Первый - использовать новый метод acceptThat. Если вы поместите это в @BeforeClass (или @Before) тестового класса, и если условие не выполнится, тест будет проигнорирован. В условии вы можете поместить системное свойство или что-то еще, что может быть глобально установлено или выключено.

Другой альтернативой является создание пользовательского бегуна, который понимает глобальное свойство и делегирует соответствующему бегуну. Этот подход намного более хрупок (поскольку внутренние бегуны JUnit4 нестабильны и могут меняться от выпуска к выпуску), но он имеет преимущество, заключающееся в возможности наследования по иерархии классов и переопределения в подклассе. Это также единственный реалистичный способ сделать это, если вам нужно поддерживать устаревшие классы JUnit38.

Вот код для пользовательского Runner. Что касается того, что может сделать getAppresponRunnerForClass, то, как я его реализовал, заключалось в том, чтобы иметь отдельную аннотацию, которая сообщает настраиваемому бегуну, с чем работать. Единственной альтернативой была некоторая очень хрупкая копия из кода JUnit.

private class CustomRunner implements Runner
 private Runner runner;

    public CustomRunner(Class<?> klass, RunnerBuilder builder) throws Throwable {
        if (!isRunCustomTests()) {
            runner = new IgnoredClassRunner(klass);
        } else {
            runner = getAppropriateRunnerForClass(klass, builder);
    }

    public Description getDescription() {
        return runner.getDescription();
    }

    public void run(RunNotifier notifier) {
        runner.run(notifier);
    }
}

EDIT: тег @RunWith работает только для всего класса. Один из способов обойти это ограничение - переместить тестовые методы в статический внутренний класс и аннотировать его. Таким образом, у вас есть преимущество аннотации с организацией класса. Но это не поможет с тегами @Before или @BeforeClass, вам придется воссоздать их во внутреннем классе. Он может вызывать метод внешнего класса, но он должен иметь свой собственный метод в качестве ловушки.

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

private class CustomRunner implements Runner
 private Runner runner;

    public CustomRunner(Class<?> klass, RunnerBuilder builder) throws Throwable {
        if (!isRunCustomTests()) {
            runner = new IgnoredClassRunner(klass);
        } else {
            runner = getAppropriateRunnerForClass(klass, builder);
    }

    public Description getDescription() {
        return runner.getDescription();
    }

    public void run(RunNotifier notifier) {
        runner.run(notifier);
    }
}

EDIT: тег @RunWith работает только для всего класса. Один из способов обойти это ограничение - переместить тестовые методы в статический внутренний класс и аннотировать его. Таким образом, у вас есть преимущество аннотации с организацией класса. Но это не поможет с тегами @Before или @BeforeClass, вам придется воссоздать их во внутреннем классе. Он может вызывать метод внешнего класса, но он должен иметь свой собственный метод в качестве ловушки.

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

private class CustomRunner implements Runner
 private Runner runner;

    public CustomRunner(Class<?> klass, RunnerBuilder builder) throws Throwable {
        if (!isRunCustomTests()) {
            runner = new IgnoredClassRunner(klass);
        } else {
            runner = getAppropriateRunnerForClass(klass, builder);
    }

    public Description getDescription() {
        return runner.getDescription();
    }

    public void run(RunNotifier notifier) {
        runner.run(notifier);
    }
}

EDIT: тег @RunWith работает только для всего класса. Один из способов обойти это ограничение - переместить тестовые методы в статический внутренний класс и аннотировать его. Таким образом, у вас есть преимущество аннотации с организацией класса. Но это не поможет с тегами @Before или @BeforeClass, вам придется воссоздать их во внутреннем классе. Он может вызывать метод внешнего класса, но он должен иметь свой собственный метод в качестве ловушки.

Тег @RunWith работает только для всего класса. Один из способов обойти это ограничение - переместить тестовые методы в статический внутренний класс и аннотировать его. Таким образом, у вас есть преимущество аннотации с организацией класса. Но это не поможет с тегами @Before или @BeforeClass, вам придется воссоздать их во внутреннем классе. Он может вызывать метод внешнего класса, но он должен иметь свой собственный метод в качестве ловушки.

Тег @RunWith работает только для всего класса. Один из способов обойти это ограничение - переместить тестовые методы в статический внутренний класс и аннотировать его. Таким образом, у вас есть преимущество аннотации с организацией класса. Но это не поможет с тегами @Before или @BeforeClass, вам придется воссоздать их во внутреннем классе. Он может вызывать метод внешнего класса, но он должен иметь свой собственный метод в качестве ловушки.

10
ответ дан 27 November 2019 в 00:22
поделиться
Другие вопросы по тегам:

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