Unit testing 在Grails应用程序中测试自定义约束

Unit testing 在Grails应用程序中测试自定义约束,unit-testing,testing,grails,constraints,Unit Testing,Testing,Grails,Constraints,我将以下内容作为我的单元测试: void testCreateDealer() { mockForConstraintsTests(Dealer) def _dealer= new Dealer( dealerName:"ABC", Email:"abc-motors@global.com", HeadOffice:"",

我将以下内容作为我的单元测试:

void testCreateDealer() {
      mockForConstraintsTests(Dealer)
      def _dealer= new Dealer( dealerName:"ABC",
                            Email:"abc-motors@global.com",
                            HeadOffice:"",
                            isBranch:false)
       assertFalse _dealer.validate()

    }
但是当我运行测试时,我得到以下错误:

No signature of method: static com.myCompany.Dealer.findByDealerNameIlike() is applicable for argument types: (java.lang.String) values: [ABC]
我在域类中使用了一些自定义约束。我如何测试这个

 static constraints = {
     dealerName(blank:false, validator:
            { val, obj ->
                      def similarDealer = Dealer.findByDealerNameIlike(val)
                      return !similarDealer || (obj.id == similarDealer.id)
            }
     )

尝试将mockForConstraintsTests()更改为mockDomain()-您正在约束中使用依赖于经销商域的经销商.findX()方法


顺便说一句,除非您在测试类的setUp()方法中创建了类似的经销商,否则测试仍然会失败。

在单元测试中,即使使用mockDomain,域对象的id属性也不会自动设置或自动递增。除非明确设置,否则您创建的所有域对象的id都将为
null


您的测试可能失败,因为测试
obj.id==similardaler.id
为真,因为它们都有
id:null
。尝试设置模拟经销商对象的id属性。

谢谢,我修改了代码,并对模拟域进行了一些研究。我将代码改为:但验证仍然没有生效。如果我在这里遗漏了什么,请告诉我。嗨,哇,我不熟悉mockForConstraintsTest的用法。mockDomain()应设置约束测试。以下步骤:不确定,因为在没有我的情况下实现自动增量似乎是可行的。