Моей проблема заключается в том, что с помощью аннотаций я не могу видеть, как передать арматуру данных в конкретизированный тест классов перед тестами выполняются.
JUnit4-образные комплекты тестов, как известно, более ограничены, чем тестовые комплекты в стиле JUnit3. Я слышал жалобы на это, но не знаю официального решения. Я думаю, что могут быть сторонние решения, которые пытаются решить эту проблему. Что касается вашей конкретной проблемы, я не думаю, что вы можете получить доступ к тестовым экземплярам из пакета JUnit4, потому что JUnit4 создает экземпляр теста перед запуском метода.
Самый простой выход - продолжить использование комплектов в стиле JUnit3. Они должны отлично работать с JUnit4. Один из недостатков управления общими ресурсами с помощью - это то, что вы больше не можете запускать тестовые классы. С другой стороны, если тестовые классы должны быть объединены в любом случае (возможно, в определенном порядке), это может быть допустимым решением.
Другой подход заключается в решении проблемы с ресурсами общих ресурсов: в вашем случае тестовые классы объявят с помощью @Rule, что они должны присутствовать на сервере. При первом запуске правила он запускает сервер, сохраняет актуальную информацию в статическом поле (-ах) и делает все, что необходимо для подготовки теста. Например, он может вставлять некоторые из полей теста, или он может просто позволить тесту использовать API правил, чтобы получить нужную ему информацию. В следующий раз, когда правило будет выполнено, оно пропускает шаг «start server». Да, статическое состояние - зло, но иногда это единственный способ обойти ограничения Юнита. (Я не буду касаться темы использования других структур тестирования здесь.)
Большое преимущество подхода «изнутри» заключается в том, что он позволяет запускать тестовые классы напрямую (без прохождения пакета) и независимо от каждого Другие. Недостатком является то, что его может быть сложнее реализовать, и что он затрудняет срывание ресурсов без памяти (в вашем случае: выключение сервера). Чтобы выполнить последнее, вам придется использовать JVM-заглушку, потому что JUnit не обеспечивает адекватного обратного вызова. Хотя это, вероятно, будет работать (потому что инструменты сборки и IDE обычно используют отдельную JVM для каждого тестового прогона), тем не менее это уродливо.
Третий подход заключается в том, чтобы ваш Ant/Maven/Gradle/независимо от сборки устанавливал/разрушал общие ресурсы до/после запуска тестов. Опять же, это менее гибко и удобно, чем подход с наименьшим издержками, и поднимает вопрос о том, как передавать информацию из сборки в JVM, которая запускает тесты (при необходимости). Примером такого подхода является Maven Cargo plugin.
И последнее, но не менее важное: вы можете попытаться быть прагматичным и запустить/остановить сервер один раз на испытательный класс. Это очень просто реализовать, но может быть или не быть адекватным в вашей ситуации (например, это может быть слишком трудоемким).
Я посмотрел в новый @Rule и методов MethodRule, но (честно говоря) они просто кажется очень сложным, но ограниченным решения проблемы, что это на самом деле не четких
Правила - это способ записи модульных и многоразовых расширений JUnit. Намного лучше, чем использование базовых классов, когда вы скоро столкнетесь с проблемой одиночного наследования. Это еще более актуально для библиотек, распространяющих JUnit-расширения.
Еще одна проблема в том, что он может показаться, что авторы JUnit намерены в конечном итоге удаления @ Перед/@ После концепции с JUnit.
Где вы узнали об этом? Разве вы не смешиваете это с xUnit.net, что сильно препятствует использованию метода установки/разрыва? Во всяком случае, выполнение некоторых действий до или после теста является одним из наиболее важных вариантов использования правил, поэтому я не думаю, что вас это беспокоит.
Что такое «передать данные об оборудовании для экземпляров тестовых классов» точно? –