JUnit 4.8 содержит хорошую новую возможность под названием "Категории", которая позволяет Вам собирать в группу определенные виды тестов. Это очень полезно, например, иметь отдельные тестовые прогоны для медленных и быстрых тестов. Я знаю материал, упомянутый в информации о версии JUnit 4.8, но хотел бы знать, как я могу на самом деле запустить все тесты, аннотируемые определенной категорией.
Информация о версии JUnit 4.8 показывает определение комплекта в качестве примера, где аннотация SuiteClasses выбирает тесты из определенной категории для выполнения, как это:
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
// Will run A.b and B.c, but not A.a
}
Кто-либо знает, как я мог запустить все тесты в категории SlowTests? Кажется, что у Вас должна быть аннотация SuiteClasses...
См. эту статью о ProductCode и PackageCode: http://www.simple-talk.com/dotnet/visual-studio/updates-to-setup-projects/
В ней объясняется, как ProductCode и PackageCode взаимодействуют во время установки и как настроить проект установки для правильного применения .msi в качестве обновления.
-121--4501564- Нет в поле, только IEnumerable < T >
предоставит его, не открывая Add
и Remove
public methods, которые могут заставить клиента получить исключение во время выполнения.
Если вы хотите, чтобы ваш открытый API явно указал, что коллекция доступна только для чтения и вам нужен индексатор, вам придется написать собственную обертку вокруг существующего списка < T >
или T []
.
Я нашел один из возможных способов достижения желаемого, но я не считаю, что это лучшее возможное решение, поскольку оно опирается на библиотеку ClassImageSuite, которая не является частью JUnit.
Я определяю тестовый номер люкс для медленных тестов следующим образом:
@RunWith(Categories.class)
@Categories.IncludeCategory(SlowTests.class)
@Suite.SuiteClasses( { AllTests.class })
public class SlowTestSuite {
}
класс AllTests определяется следующим образом:
@RunWith(ClasspathSuite.class)
public class AllTests {
}
Мне пришлось использовать класс ClassGroupSuite из проекта ClassGroupSuite здесь. Он найдет все классы с тестами.
Я не уверен, в чем именно ваша проблема.
Просто добавьте все тесты в номер (или хиракия номеров). Затем используйте аннотацию Categories Runner и Include/ExcludeCategory, чтобы указать категории, которые вы хотите запустить.
Хорошей идеей может быть наличие одного набора, содержащего все тесты, и пары отдельных наборов, относящихся к первому, с указанием различных наборов Категорий, которые вы указали.
Не является прямым ответом на вашу проблему, но, возможно, общий подход можно было бы усовершенствовать...
Почему ваши тесты медленные? Может быть, установка длится долго (база данных, входы/выходы и т.д.), может быть, тесты слишком много тестируют? Если это так, то я бы отделил реальные юнит-тесты от "длительных", которые зачастую действительно являются интеграционными тестами.
В моих установках есть инсценировка env, где юнит-тесты выполняются часто, а интеграционные тесты - постоянно, но реже (например, после каждого коммита в контроле версий). Я никогда не работал с группировкой юнит-тестов, потому что они должны быть свободно соединены. Я работаю только с группировкой и связью тестовых кейсов в интеграционно-тестовых установках (но с TestNG).
Но приятно знать, что в JUnit 4.8 появились некоторые возможности группировки.