Tenho uma entidade “Article” com alguns atributos anotados com @notBlank e estou testando minha classe repository. O comportamento esperado é: quando tentar salvar um objeto no banco de dados com algum atributo null ou empty, é lençado uma “ConstraintViolationExcpetion”, mas meu teste diz que nada é lançado.
minha entidadde:
@Entity
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@NotBlank
private String title;
@NotBlank
private String author;
private LocalDate date;
@NotBlank
@Size(min = 201)
@Lob
private String text;
public Article() {
}
public Article(String title, String author, LocalDate date, String text) {
this.title = title;
this.author = author;
this.date = date;
this.text = text;
}
classe service:
public interface ArticleService {
Optional<Article> findById(Integer id);
Article findByTitle(String title);
List<Article> findAll();
List<Article> findAllByTitle(String title);
void save(Article article);
}
classe de teste:
-OBS: tenho 5 testes, 4 passam, menos o teste “save_ThrowConstraintViolationExcpetion_WhenTitleIsEmpty()” que dá o seguinte erro: org.opentest4j.AssertionFailedError: Expected javax.validation.ConstraintViolationException to be thrown, but nothing was thrown.
@DataJpaTest
@DisplayName("Classe de teste do ArticleService")
@Import(ArticleServiceImpl.class)
public class ArticleServiceTest {
@Autowired
private ArticleService articleService;
@Test
//nameMethod_expectedAct_state
void save_Persist_WhenSuccessful() {
final Article result = articleService.save(new Article("article 1", "autor 1", LocalDate.of(1998, 05, 12),
"O lorem ipsum é um texto bastante conhecido dos profissionais de design e editoração. Trata-se de um poema em latim, escrito por Cícero em 45 a.C, com as letras embaralhadas. É utilizado no mundo todo para preencher espaços em publicações antes da inserção do conteúdo real."));
assertAll(
() -> assertThat(result).isNotNull(),
() -> assertThat(result.getAuthor()).isNotBlank(),
() -> assertThat(result.getTitle()).isNotBlank(),
() -> assertThat(result.getText()).isNotBlank(),
() -> assertThat(result.getDate()).asInstanceOf(InstanceOfAssertFactories.LOCAL_DATE));
}
@Test
void save_ThrowConstraintViolationExcpetion_WhenTitleIsEmpty() {
Article obj = new Article("", "autor 1", null, "O lorem ipsum é um texto bastante conhecido dos profissionais de design e editoração. Trata-se de um poema em latim, escrito por Cícero em 45 a.C, com as letras embaralhadas. É utilizado no mundo todo para preencher espaços em publicações antes da inserção do conteúdo real.");
assertThrows(ConstraintViolationException.class, () -> articleService.save(obj));
}
@Test
void findByTitle_ReturnTheArticle_WhenSuccesseful() {
String expectedTitle = "Title 1";
Article obj = new Article(expectedTitle, "autor 1", LocalDate.of(1998, 05, 12), "O lorem ipsum é um texto bastante conhecido dos profissionais de design e editoração. Trata-se de um poema em latim, escrito por Cícero em 45 a.C, com as letras embaralhadas. É utilizado no mundo todo para preencher espaços em publicações antes da inserção do conteúdo real.");
Article articleSaved = articleService.save(obj);
Article resultExpected = articleService.findByTitle(articleSaved.getTitle());
String resultTitle = resultExpected.getTitle();
assertEquals(expectedTitle, resultTitle);
}
@Test
void findByTitle_ReturnNull_WhenArticleNotFound() {
String expectedTitle = "Title 1";
Article resultExpected = articleService.findByTitle(expectedTitle);
assertThat(resultExpected).isNull();
}
@Test
void findAllByTitle_ReturnList_WhenSuccessful() {
String searchedTitle = "Titl";
int expectedResult = 2;
Article u1 = new Article("Title 1", "autor 1", LocalDate.of(1998, 05, 12), "O lorem ipsum é um texto bastante conhecido dos profissionais de design e editoração. Trata-se de um poema em latim, escrito por Cícero em 45 a.C, com as letras embaralhadas. É utilizado no mundo todo para preencher espaços em publicações antes da inserção do conteúdo real.");
Article u2 = new Article("Outro Title para os testes", "autor 1", LocalDate.of(1998, 05, 12), "O lorem ipsum é um texto bastante conhecido dos profissionais de design e editoração. Trata-se de um poema em latim, escrito por Cícero em 45 a.C, com as letras embaralhadas. É utilizado no mundo todo para preencher espaços em publicações antes da inserção do conteúdo real.");
Article u3 = new Article("Outra coisa", "autor 1", LocalDate.of(1998, 05, 12), "O lorem ipsum é um texto bastante conhecido dos profissionais de design e editoração. Trata-se de um poema em latim, escrito por Cícero em 45 a.C, com as letras embaralhadas. É utilizado no mundo todo para preencher espaços em publicações antes da inserção do conteúdo real.");
articleService.save(u1);
articleService.save(u2);
articleService.save(u3);
List<Article> list = articleService.findAllByTitle(searchedTitle);
int actualResult = list.size();
assertEquals(expectedResult, actualResult);
}
}