Как я могу различить «запустить все тесты» и «запустить только этот тест»? - PullRequest
2 голосов
/ 08 октября 2010

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

  1. Тест выполняется на сервере CI
  2. Пользователь выбрал этот тест в IDE и запускает его

Решение для # 1 простое: используйте свойство и пропустите тест, если он не установлен.

Но как я мог реализовать # 2?

[EDIT] Это специфично для Java. Я использую JUnit 4 с Eclipse.

Ответы [ 2 ]

1 голос
/ 08 октября 2010

Для этого мы используем Maven, который прекрасно интегрируется с Eclipse. Мы используем JUnit для

  • модульные тесты, которые начинаются с префикса или суффикса просто с Test и выполняются при каждой полной сборке
  • интеграционные тесты с префиксом IntegrationTest. Они запускаются только тогда, когда специальный профиль Maven активируется с помощью переключателя командной строки (-PintegrationTests).

Полный набор интеграционных тестов запускается три раза в день на сервере CI или разработчиком, который явно указывает вышеупомянутый профиль (mvn test -PintegrationTests). Конечно же, программист в своей среде IDE может в любое время запустить один интеграционный тест.

Это соответствующая часть из pom.xml:

<profiles>
    <profile>
        <id>integrationTests</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                           <includes>
                                <include>**/Test*.java</include>
                                <include>**/*Test.java</include>
                                <include>**/IntegrationTest*.java</include>
                         </includes>
                      </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
1 голос
/ 08 октября 2010

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

Хотя это полезно, это не единица тесты , обозначенные тегом unit-test.

Тест не является модульным тестом, если:

  • Он обращается к базе данных
  • Itобменивается данными по сети
  • Это касается файловой системы
  • Он не может работать одновременно с другими вашими модульными тестами
  • Вы должны выполнить специальные действия дляваша среда (например, редактирование конфигурационных файлов) для его запуска.

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

Если вы используете Makefile, вы можете иметь цель check для истинных юнит-тестов и цель livecheck для этих медленных системных тестов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...