Grails模型Unity测试

时间:2014-10-03 23:26:16

标签: grails testing junit

我有一个"域"(模型)想要进行Unity测试以检查是否有效。 但是当我执行测试时,我得到了

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

在Unity测试类中

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

1 个答案:

答案 0 :(得分:1)

在Grails 2.4.x(这是我假设你正在使用的)中,默认的测试类型是Spock测试,这就是generate-*脚本创建的内容。如果您愿意,您仍然可以使用JUnit 3或4样式编写自己的测试。但Spock中的测试类(至少使用Grails集成,我不确定它是否在Grails之外是严格的)必须以“Spec”结尾的名称。这就是你看到错误的原因。

测试方法不必为void并以“test”(JUnit 3样式)开头,或者为void并且具有@Test注释(JUnit 4样式)。如果方法是公开的(显式地或者如果没有范围修饰符)并且至少有一个标记的块,例如,测试运行器确定方法是否是测试方法。 when:given:then:等。此外,Spock使用一些AST魔法允许您在方法名称中使用空格(您只需引用整个名称)并具有表现力,自描述方法名称,例如

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