我正在为服务类编写单元测试用例。有一种方法叫做
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/