Grails模型统一测试

Grails模型统一测试,grails,testing,junit,Grails,Testing,Junit,我有一个“域”(模型),它想做一个统一测试来检查是否有效。 但是当我执行测试时,我得到 java.lang.IllegalArgumentException: Test class can only have one constructor 当试图初始化某个域(模型)的类时,总是会发生这种情况 正确执行测试用例的方法是什么 class Race { static constraints = { } String name Date startDate Stri

我有一个“域”(模型),它想做一个统一测试来检查是否有效。 但是当我执行测试时,我得到

java.lang.IllegalArgumentException: Test class can only have one constructor
当试图初始化某个域(模型)的类时,总是会发生这种情况

正确执行测试用例的方法是什么

class Race {

   static constraints = {    }

   String name
   Date startDate
   String city
   String state
   BigDecimal distance
   BigDecimal cost
   Integer maxRunners = 100000

   BigDecimal inMiles() {
      return 0.6
   }
}
在统一考试课上

import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(Race)
class RaceTest extends Specification {

   void testInMiles() {
      when:
         def model = new Race(distance:5.0);

      then:
         0.6 == model.inMiles()
   }
}
在Grails2.4.x中(我假设您正在使用),默认测试类型是Spock测试,这是由
generate-*
脚本创建的。如果愿意,您仍然可以用JUnit3或JUnit4样式编写自己的测试。但是Spock中的测试类(至少使用Grails集成,我不确定它在Grails之外是否严格)的名称必须以“Spec”结尾。这就是为什么你会看到这个错误

测试方法不必为void并以“Test”(JUnit3样式)开头,也不必为void并带有
@Test
注释(JUnit4样式)。如果一个方法是公共的(无论是显式的还是没有范围修饰符的),并且至少有一个带标签的块,例如:,
给定:
然后:
,等等,测试运行者决定该方法是否是测试方法。此外,Spock使用一些AST魔法允许您在方法名称中使用空格(您只需引用整个名称)并具有表达性、自描述性的方法名称,例如

def 'an admin without ROLE_SUPER cannot view records of other admins'() {
   ...
}