Самый простой способ охватить все ветви - это накормить класс насмешками определенных типов.
В Java-мире есть много фреймворков, где я предпочитаю Mockito
Когда вам нужно указывать макет для каждого занятия подкласса.
, например
Member memberMock = Mockito.mock(Member.class);
и для каждой функции, вызываемой в этом макете, вы должны указать возвращаемое значение, которое можно проверить в результирующем EventPayload следующим образом
when(memberMock.getId()).thenReturn(4711);
Краткая версия теста, проверяющего ветку Member, будет выглядеть следующим образом:
Member memberMock = Mockito.mock(Member.class);
when(memberMock.getId()).thenReturn(4711);
//[...] here are the other calls mocked [...]
MessageBuilder messageBuilder = MessageBuilder();
EventPayload testSubject = messageBuilder.build(memberMock)
assertEquals(testSubject.id, 4711)
//[...] other asserts [...]
Вы также можете подумать о реорганизации классов, чтобы получить лучшую архитектуру и, следовательно, лучшую тестируемость, но это выходит за рамки этого объяснения