簡體   English   中英

如何對包含使用謂詞的 lambda function 的 function 進行單元測試

[英]How to unit test a function that contains a lambda function that uses Predicate

幾天來我一直在嘗試對這個 function 進行單元測試,但似乎無法解決,而且我在所有服務中都有類似的功能,這確實降低了代碼覆蓋率。 有沒有辦法對它進行單元測試,如果沒有,也許只是讓 jacoco/sonarqube 忽略它?

public Specification<ContratEntity> getSpecification(ContratDto dto) {
        List<DepartementEntity> departementEntities = securityService.checkDepartementFiltre();
        String[] filtreBus = securityService.checkBuFiltre();
        List<TypeContratEnum> typeContratEnums = securityService.checkTypeContratFiltre();
        return (root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();

            if (dto.getNumero() != null && !"".equals(dto.getNumero())) {
                predicates.add(cb.like(cb.lower(root.get("numero")), "%" + dto.getNumero().toLowerCase() + "%"));
            }
            if (dto.getBu() != null && !"".equals(dto.getBu())) {
                predicates.add(cb.like(cb.lower(root.get("bu")), "%" + dto.getBu().toLowerCase() + "%"));
            }

            if (dto.getDepartement() != null && dto.getDepartement().getAbreviation() != null) {
                predicates.add(cb.like(cb.lower(root.get("departement").get("abreviation")), dto.getDepartement().getAbreviation().toLowerCase()));
            }

            if (departementEntities != null) {
                predicates.add(cb.or(
                        root.get("departement").in(departementEntities),
                        root.get("departement").isNull()
                        ));
            }
            if (filtreBus != null) {
                predicates.add(root.get("bu").in(filtreBus));
            }

            if (typeContratEnums != null) {
                predicates.add(root.get("type").in(typeContratEnums));
            }

            if (dto.getLbvFournisseur() != null  && dto.getLbvFournisseur().getCnuf_frn() != null && !dto.getLbvFournisseur().getCnuf_frn().equals("")) {
                predicates.add(cb.or(
                        cb.like(cb.lower(root.join("lbvFournisseur", JoinType.LEFT).get("cnuf_frn")), dto.getLbvFournisseur().getCnuf_frn().toLowerCase()),
                        cb.like(cb.lower(root.join("hlvFournisseur", JoinType.LEFT).get("cnuf_frn")), dto.getLbvFournisseur().getCnuf_frn().toLowerCase()),
                        cb.like(cb.lower(root.join("mlvFournisseur", JoinType.LEFT).get("cnuf_frn")), dto.getLbvFournisseur().getCnuf_frn().toLowerCase())
                ));
            }
            if (dto.getLbvFournisseur() != null && dto.getLbvFournisseur().getRaison_sociale() != null) {
                predicates.add(cb.or(
                        cb.like(cb.lower(root.join("lbvFournisseur", JoinType.LEFT).get("raison_sociale")), "%"+ dto.getLbvFournisseur().getRaison_sociale().toLowerCase() + "%"),
                        cb.like(cb.lower(root.join("hlvFournisseur", JoinType.LEFT).get("raison_sociale")), "%"+ dto.getLbvFournisseur().getRaison_sociale().toLowerCase() + "%"),
                        cb.like(cb.lower(root.join("mlvFournisseur", JoinType.LEFT).get("raison_sociale")), "%"+ dto.getLbvFournisseur().getRaison_sociale().toLowerCase() + "%")
                ));
            }
            if (dto.getLbvFournisseur() != null && dto.getLbvFournisseur().getIce() != null && dto.getLbvFournisseur().getIce() != "") {
                predicates.add(cb.or(
                        cb.like(cb.lower(root.join("lbvFournisseur", JoinType.LEFT).get("ice")), dto.getLbvFournisseur().getIce().toLowerCase()),
                        cb.like(cb.lower(root.join("hlvFournisseur", JoinType.LEFT).get("ice")), dto.getLbvFournisseur().getIce().toLowerCase()),
                        cb.like(cb.lower(root.join("mlvFournisseur", JoinType.LEFT).get("ice")), dto.getLbvFournisseur().getIce().toLowerCase())
                ));
            }
            if (dto.getType() != null) {
                predicates.add(cb.equal(root.get("type"), dto.getType()));
            }
            Predicate[] predicatesArray = new Predicate[predicates.size()];
            query.orderBy(cb.desc(root.get("id")));
            return cb.and(predicates.toArray(predicatesArray));
        };
    }

你可以在這里找到報道

我會提取一個帶有 Lambda 表達式內容的方法,然后將 lambda 本身轉換為 class 字段。 這樣您就可以測試提取的方法,而 lambda 本身將不會包含在覆蓋范圍內。 我還將創建字段 static 以避免不必要的功能接口實現實例化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM