#java #junit
#java #junit
Вопрос:
В чем разница между кодом в Junit:
class MethodsTest {
Methods methods = new Methods();
}
и эти:
class MethodsTest {
Methods methods;
@BeforeEach
void init() {
methods = new Methods();
}
}
Когда использовать первый код, а когда второй код?
Ответ №1:
В первой версии вы надеетесь, что конкретный тестовый запуск, который вы используете, создает новый экземпляр MethodsTest
, неявно создавая новый экземпляр Methods
при выполнении конкретного теста. Во второй версии вы сообщаете тестировщику, который вы явно используете для создания нового экземпляра Methods
при выполнении нового теста.
Ответ №2:
Если не задействовано наследование, то нет никакой разницы.
Если бы вам нужно было расширить MethodsTest
класс, вы могли бы переопределить init()
метод, и переопределяющий метод не обязательно инициализировал бы поле напрямую или, возможно, косвенно путем вызова super.init()
; или он мог бы инициализировать его по-другому.
Лично я предпочел бы первую. Он более лаконичный, не переопределяемый, и его семантика очевидна любому, кто знаком с Java, даже без специфичных для JUnit знаний.