2014-02-10 138 views
1

我想测试域对象中等于的覆盖,以确保'包含'的作品。单元测试机制无视我,尽管文档和错误表示我应该能够模拟addTo。Grails单元测试和模拟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: "[email protected]") 
    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实现了equals。

该文件说@Mock([YYY])应该做的伎俩:Naleid upgrading to grails 2 testing一样unit testing addto

回答

4

我觉得你需要两个变化,使其工作

1.增加MemberCategory@TestFor,因为你的试图添加成员membercategirt那么你的代码将会变成这个样子:

@TestFor(MemberCategory) 
@TestFor(Member) 

2.Also加入member.addToMemberCategories(membersCat)后打电话save(),然后你的代码会变成这样的东西

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

希望这会有所帮助。

+0

是 - 额外的@TestFor从问题中删除错误。我无法确认需要保存,因为包含()的测试报告不能以任何方式工作。谢谢 – Interlated