在Grails App中测试自定义约束

时间:2010-04-07 08:18:36

标签: unit-testing testing grails constraints

我有以下作为我的单元测试:

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)
            }
     )

2 个答案:

答案 0 :(得分:2)

尝试将mockForConstraintsTests()更改为mockDomain() - 您在约束中使用Dealer.findX()方法,该方法依赖于Dealer域。

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

答案 1 :(得分:0)

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

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