Junit5: тестирование метода проверки объекта, который использует только шаблон компоновщика без каких-либо установщиков.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Junit5: тестирование метода проверки объекта, который использует только шаблон компоновщика без каких-либо установщиков.

Сообщение Anonymous »

У меня есть агрегатор домена «Сотрудник», который использует шаблон компоновщика для установки своих полей во время построения объекта. У него есть различные методы жизненного цикла, которые изменяют состояние, но нет прямых установщиков.
У него также есть метод validate(), который проверяет некоторые условия в полях, установленных строителем, и, следовательно, может потерпеть неудачу (выдать исключение) по нескольким причинам.
Совокупность примерно такая, как показано ниже:

Код: Выделить всё

public class Employee {

private String field1;
private String field2:

//say 10 fields

public static Builder builder() {
return new Builder();
}

public static Builder() {
// builder fields and methods
}

//public lifecycle methods

public void validate() {
if (field1 == null) {
//throw custom exception
}
if (field2 == null) {
//throw custom exception
}
// More condition checks on fields (not all are null checks)
}
}
Теперь мой тестовый класс организован следующим образом:

Код: Выделить всё

public class EmployeeTest {

@Test
public void givenNewEmployee_IfField1IsMissing_thenThrowsException() {

//Setup
Employee testEmployee = Employee.builder()
.field2(nonNullValue)
//other fields
.build();

Assertions.assertThrows(CustomException.class, testEmployee::validate);
}

@Test
public void givenNewEmployee_IfField2IsMissing_thenThrowsException() {

//Setup
Employee testEmployee = Employee.builder()
.field1(nonNullValue)
//other fields
.build();

//Test
Assertions.assertThrows(CustomException.class, testEmployee::validate);
}

}
В приведенном выше примере для каждого тестового примера мне нужно создать весь тестовый объект «Сотрудник» testEmployee, за исключением одного поля в методе build(). Это делает мои тестовые примеры неуклюжими и требует много строк кода.
Мой вопрос:
Есть ли способ настроить testEmployee один раз, а затем установить для отдельных полей значение null в каждом из тестовых случаев, чтобы мои тесты были краткими и не требовали создания всего testEmployee?
Мне известны аннотации @BeforeAll и @BeforeEach для настройки тестов. Но поскольку мой класс «Сотрудник» не предоставляет никакого установщика, у меня нет возможности настроить один действительный testEmployee в @BeforeEach, а затем установить для отдельных полей значение null в каждом из тестовых случаев. Поэтому мне нужны альтернативы, если таковые имеются.


Подробнее здесь: https://stackoverflow.com/questions/791 ... only-witho
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»