unit-testing - Grails test-app未执行语句

标签 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>命令运行单元测试。

谁能帮助我解决这个问题。

最佳答案

每次“?”使用operator时,引入了新的分支条件,因为它正在执行空检查。因此,为了覆盖此语句中的所有分支条件
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,所以我建议摆脱该检查。

关于unit-testing - Grails test-app未执行语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28236269/

相关文章:

c# - 在 VS2005 单元测试中是否可以断言已调用方法?

javascript - 使用 Visual Studio 2010 设置 jsTestDriver

c# - 如何在 Asp.Net Core 2.0 中实例化 UrlHelper 进行 Controller 单元测试

spring - 在 Grails 中动态设置消息 i18n

grails - Groovy + OSGi还是Grails?

grails - Grails URL映射在GSP上导致错误

jquery - 在 Grails 中使用 jquery 附加模板

hibernate - 当一个人的pk引用另一个人的pk时,如何在GORM中映射实体

javascript - 在 Jest 中使用 'new' 关键字模拟外部服务

java - mockito 拒绝将 TypeSafeMatcher 与通用方法 API 配对