我有一个"域"(模型)想要进行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()
}
}
答案 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'() {
...
}