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

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

Сообщение Anonymous »

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

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

public class Employee {

private String field1;
private String field2:

//say 10 fields

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

public static class 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 ... hout-any-s
Ответить

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

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

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

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

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