我正在为服务类编写单元测试用例。有一种方法叫做 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>
命令来运行单元测试。
任何人都可以帮我解决这个问题。
答案 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,所以我建议去除那个检查。