Как издеваться над «беглым» DataSourceHealthIndicator? - PullRequest
0 голосов
/ 17 февраля 2020

Я использую Spring Boot 2.2.4.RELEASE.

У меня есть этот кусок кода в моем контроллере , где я использую "free" DataSourceHealthIndicator, чтобы проверить, не выключена ли база данных :

@Autowired 
private DataSourceHealthIndicator d;

//some code

if("DOWN".equals(d.getHealth(false).getStatus().getCode())) {
 // do something
} else {
 // proceed
}

Теперь, в моем тесте срезов, я хотел бы смоделировать его (DataSourceHealthIndicator), но у меня есть нулевой указатель, так как, очевидно, getHealth () не возвращает объект Health, getStatus () не возвращает объект Status ...

@WebMvcTest
//some code
@MockBean
private DataSourceHealthIndicator d;
//some code

given(this.d.getHealth(anyBoolean()).getStatus().getCode()).willReturn("UP");

Как я могу go насмехаться над ним?

Я пробовал это:

given(this.d.getHealth(anyBoolean())).willReturn(Health.up().build());
given(this.d.getHealth(anyBoolean()).getStatus()).willReturn(Status.UP);
given(this.d.getHealth(anyBoolean()).getStatus().getCode()).willReturn("UP");

Но для 2-го данного оператора произойдет сбой:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
Статус не может быть возвращен getHealth ()
getHealth () должен возвращаться Здоровье

1 Ответ

0 голосов
/ 18 февраля 2020

I сместил код DataSourceHealthIndicator в собственный класс.

Это позволило мне легко провести тестирование слоя Controller и одновременно позволил мне легко протестировать другой класс, используя только принцип MockitoExtension.class.

SRP & KISS в действии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...