如何使用“Spring Data JPA”规范进行单元测试方法
2022-09-03 02:38:39
						我正在玩org.springframework.data.jpa.domain.Specification,它只是一个基本的搜索:
 public Optional<List<Article>> rechercheArticle(String code, String libelle) {
    List<Article> result = null;
    if(StringUtils.isNotEmpty(code) && StringUtils.isNotEmpty(libelle)){
        result = articleRepository.findAll(Specifications.where(ArticleSpecifications.egaliteCode(code)).and(ArticleSpecifications.egaliteLibelle(libelle)));
    }else{
        if(StringUtils.isNotEmpty(code)){
            result= articleRepository.findAll(Specifications.where(ArticleSpecifications.egaliteCode(code)));
        }else{
            result = articleRepository.findAll(Specifications.where(ArticleSpecifications.egaliteLibelle(libelle)));
        }
    }
    if(result.isEmpty()){
        return Optional.empty();
    }else{
        return Optional.of(result);
    }
}
这实际上工作正常,但我想为此方法编写单元测试,我无法弄清楚如何检查传递给我的文章Repository.findAll()的规范。
目前我的单元测试看起来像:
@Test
public void rechercheArticle_okTousCriteres() throws FacturationServiceException {
    String code = "code";
    String libelle = "libelle";
    List<Article> articles = new ArrayList<>();
    Article a1 = new Article();
    articles.add(a1);
    Mockito.when(articleRepository.findAll(Mockito.any(Specifications.class))).thenReturn(articles);
    Optional<List<Article>> result = articleManager.rechercheArticle(code, libelle);
    Assert.assertTrue(result.isPresent());
    //ArgumentCaptor<Specifications> argument = ArgumentCaptor.forClass(Specifications.class);
    Mockito.verify(articleRepository).findAll(Specifications.where(ArticleSpecifications.egaliteCode(code)).and(ArticleSpecifications.egaliteLibelle(libelle)));
    //argument.getValue().toPredicate(root, query, builder);
}
有什么想法吗?
 
					 
				 
				    		 
				    		 
				    		 
				    		