Boa tarde amigos,
Estou com um teste unitário para fazer e não consigo encontrar uma forma de fazê-lo.
Criei um método que recebe um objeto e utilizando a API de reflection do Java, retorna se todos os atributos públicos daquele objeto são nulos.
public static boolean allPublicFieldsAreNull(Object object) {
if (object == null) {
return false;
}
for (Field field : object.getClass().getFields()) {
try {
if (field.get(object) != null) {
return false;
}
} catch (IllegalAccessException e) {
return false;
}
}
return true;
}
E para testar este método, criei os seguintes testes unitários:
O primeiro verifica o parâmetro de entrada nulo.
@Test
public void allPublicFieldsAreNull_should_return_false_because_parameterIsNull() {
assertThat(ObjectUtils.allPublicFieldsAreNull(null)).isFalse();
}
O segundo verifica o retorno TRUE.
@Test
public void allPublicFieldsAreNull_should_return_true() {
assertThat(ObjectUtils.allPublicFieldsAreNull(new MyObject())).isTrue();
}
O terceiro simula um atributo não nulo, para verificar o retorno FALSE.
@Test
public void allPublicFieldsAreNull_should_return_false() {
final MyObject data = new MyObject();
data.id = 123;
assertThat(ObjectUtils.allPublicFieldsAreNull(data)).isFalse();
}
Até aqui, tudo lindo, porém, estou precisando verificar também, quando a exceção ocorre, mas, já tentei de diversas formas e não consigo fazer funcionar.
Segue alguns testes que tentei fazer:
@Test
public void allPublicFieldsAreNull_should_return_false_because_anExceptionHappens() throws NoSuchFieldException {
final SusData mock = mock(SusData.class);
doThrow(new Exception()).when(mock).getClass().getField("id");
assertThat(ObjectUtils.allPublicFieldsAreNull(mock)).isFalse();
}
e
@Test
public void allPublicFieldsAreNull_should_return_false_because_anExceptionHappens() throws IllegalAccessException {
final SusData mock = mock(SusData.class);
doThrow(new Exception()).when(mock).getClass().getFields()[0].get(mock);
assertThat(ObjectUtils.allPublicFieldsAreNull(mock)).isFalse();
}
Os métodos não geram nenhum erro, mas também não lançam a exceção, fazendo o retorno ser incorreto.
Alguém saberia me ajudar?