Grails test-app没有执行语句

时间:2015-01-30 12:46:01

标签: unit-testing grails

我正在为服务类编写单元测试用例。有一种方法叫做 getMemberStatusAndCurrentProducts。我已经完全填写了这两个条件,但它仍然没有执行这个条件的内部语句。

Map getMemberStatusAndCurrentProducts(Member member) {
        def results = [:]

        results.memberId = member.id
        results.firstName = member.contactInfo.firstName
        results.lastName = member.contactInfo.lastName
        results.status = member.status
        results.email = member.contactInfo.email

        if (member.status == MemberStatusType.EXPIRED) {
            results.products = (member.activeEnrollments.originatingOffer*.products)?.flatten()?.unique()?.sort() { it.name }
            results.offerGroup = (member.activeEnrollments.originatingOffer*.offerGroup)?.flatten()?.unique()?.sort() { it?.name }
        } else {
            results.products = (member.activeEnrollments.originatingOffer*.products)?.flatten()?.unique()?.sort() { it.name }
            results.offerGroup = (member.activeEnrollments.originatingOffer*.offerGroup)?.flatten()?.unique()?.sort() { it?.name }
        }

        return results
    }

显示if条件,但这些陈述显示为未覆盖

if (member.status == MemberStatusType.EXPIRED) {
            results.products = (member.activeEnrollments.originatingOffer*.products)?.flatten()?.unique()?.sort() { it.name }
            results.offerGroup = (member.activeEnrollments.originatingOffer*.offerGroup)?.flatten()?.unique()?.sort() { it?.name }
        } else {
            results.products = (member.activeEnrollments.originatingOffer*.products)?.flatten()?.unique()?.sort() { it.name }
            results.offerGroup = (member.activeEnrollments.originatingOffer*.offerGroup)?.flatten()?.unique()?.sort() { it?.name }
        }

如果activeEnrollments是成员域的方法,则originatingOffer是Offer域的对象。我正在使用test-app -coverage :unit <service_class>命令来运行单元测试。

任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

每次'?'使用运算符时,会引入新的分支条件,因为它正在执行空检查。所以为了涵盖这个陈述中的所有分支条件

results.products = (member.activeEnrollments.originatingOffer*.products)?.flatten()?.unique()?.sort() { it.name }

你需要在哪里写一个测试 (member.activeEnrollments.originatingOffer*.products)返回null / empty,(member.activeEnrollments.originatingOffer*.products)?.flatten()返回null / empty的测试,以及(member.activeEnrollments.originatingOffer*.products)?.flatten()?.unique()返回null / empty的测试。

我没有看到unique()在这种情况下如何返回null / empty,所以我建议去除那个检查。