【问题标题】:Testing custom constraints in Grails App在 Grails App 中测试自定义约束
【发布时间】:2010-04-07 08:18:35
【问题描述】:

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

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

【问题讨论】:

    标签: unit-testing testing grails constraints


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 Ali 我修改了我的代码并对 mockDomain 做了一些研究。我将代码更改为:wb.pastebin.com/g1jCwVAM 但仍然没有进行验证。如果我在这里遗漏了什么,请告诉我非常感谢。
    • 嗨 WaZ,我不熟悉 mockForConstraintsTest 的这种用法。 mockDomain() 应该设置约束测试。以下通过:pastebin.com/w4mHmFH0
    【解决方案2】:

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

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

    【讨论】:

    • 不确定,因为如果没有我实现自动增量,它似乎确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    相关资源
    最近更新 更多