【问题标题】:Grails Unit test and mocking addToGrails 单元测试和模拟 addTo
【发布时间】:2014-02-10 11:48:55
【问题描述】:

我正在尝试测试域对象中 equals 的覆盖,以确保“包含”有效。尽管文档和错误说我应该能够模拟 addTo,但单元测试机制正在挑战我。

我的测试是:

@TestFor(Member)
@Mock([Member])
class MemberCategoryTests {

  void testContains() {
    MemberCategory schoolCat = new MemberCategory(name: "SCHOOL")
    MemberCategory membersCat = new MemberCategory(name: "Members")
    Member member = new Member(membershipNumber: "333333",
            surname: "Tester",
            forenames: "Jim",
            preferredEmail: "mmm@yyy.com")
    member.addToMemberCategories(schoolCat)
    member.addToMemberCategories(membersCat)

    MemberCategoryRedback memberCategoryRedback = new MemberCategoryRedback(name: "SCHOOL")
    assert member.memberCategories.contains(memberCategoryRedback)
  }
}

错误是:

No signature of method: au.com.interlated.civiLink.Member.addToMemberCategories() is applicable for argument types: (au.com.interlated.civiLink.MemberCategory) 

域对象并不特殊。 MemberCategory 实现等于。

这个文档说@Mock([yyy]) 应该可以解决问题:Naleid upgrading to grails 2 testingunit testing addto 一样

【问题讨论】:

    标签: unit-testing grails


    【解决方案1】:

    我觉得您需要进行两项更改才能使其正常工作

    1.将MemberCategory添加到@TestFor,因为您尝试将成员添加到membercategirt然后您的代码将变成这样:

    @TestFor(MemberCategory)  
    @TestFor(Member)
    

    2.在添加member.addToMemberCategories(membersCat)之后也调用save(),那么你的代码就会变成这样的样子

    if(!member.save(validate: true,flush:true,failOnError: true)) {    
       member.errors.each {    
          log.debug(it)   
       }   
    } 
    

    希望这会有所帮助。

    【讨论】:

    • 是的 - 额外的 @TestFor 删除了问题中的错误。我无法确认是否需要保存,因为包含()的测试报告无法正常工作。谢谢
    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多