Одним из возможных способов является использование наследования:
Заставить все тестовые классы расширяться из одного «родительского тестового» класса и определить @Before
в родительском классе. Поэтому он будет вызываться автоматически для всех подклассов:
public class ParentTest {
@Before
public void doInitialization() {
....
}
}
public class Test1Class extends ParentClass {
@Test
public void fooTest() {
// doInitialization will be executed before this method
}
@Test
public void barTest() {
// doInitialization will be executed before this method as well
}
}
Два примечания:
Примечание 1
В коде, который вы используете sut
(испытуемый объект) - это, очевидно, не должно быть в методе doInitialization
родителя, поэтому возможно, что Test1Class
также будет иметь методы, помеченные @Before
(см. здесь для получения информации о порядке ии так далее) Затем `sut инициализируется с помощью Spy, что, честно говоря, странно, ИМХО, тестируемый субъект должен быть реальным классом, который вы написали, но это выходит за рамки вопроса, просто упомянув его, потому что он может указывать на ошибку.
Примечание 2
Я пишу это в попытке помочь, потому что вы сказали, что вы новичок в Java, это не имеет прямого отношения к вашемувопрос ...
Хотя этот подход работает в целом, вы должны быть очень осторожны с PowerMockito. Я не эксперт по PowerMockito и стараюсь избегать такого рода пародий в моем коде, но в двух словах, способ, которым он манипулирует байтовым кодом, может конфликтовать с другими инструментами. Из вашего кода: вы можете сделать рефакторинг HelperUtils
нестатичным и, таким образом, избежать PowerMocking в пользу регулярного моделирования, которое быстрее и намного безопаснее. Что касается ведения журнала - обычно вы можете пойти на компромисс с ним в модульном тесте, если вы используете библиотеку slf4j, вы можете настроить его на использование журнала «no-op» для тестов, таких как отправка всех сообщений регистрации в «ничто», а не-видеть их в консоли.