0
我们从Grails 1.3.7迁移到2.2的原因之一是能够对我们的(许多)标准进行单元测试。Grails 2.2中的测试标准
而且我们已经与标准进行测试碰到的第一件事情是这样的:
属性[nightly.id]不是类 的[com.litle.bldvwr.Result]在grails.gorm有效的属性。 CriteriaBuilder.validatePropertyName(CriteriaBuilder.java:968)
我们拥有的是一个简单的多对一的关系,结果和夜间。 每个结果每晚1次。 Nightly和Result之间没有直接的关系。
更新
特定代码是: Nightly.groovy:
package examples
import java.util.Date;
class Nightly {
String name
String status
static constraints = {
status nullable:true
name unique: true, nullable: false, blank: false
}
static mapping = {
}
String toString() {
name +' ' + status
}
}
Result.groovy:
package examples
import java.util.Date;
class Result {
String status
String name
String type
Nightly nightly
static mapping = {
}
Result() {
}
static def gimmeCountByNightlyAndStatusAndRerunIsNull(def nightly, def status) {
def count = Result.createCriteria().count {
and {
eq('nightly.id', nightly.id)
eq('status', status)
isNull('rerun')
}
}
return count
}
}
ResultTests.groovy
package examples
import grails.test.mixin.*
import org.junit.*
@TestFor(Result)
@Mock(Nightly)
class ResultTests {
void testCriteriaMess() {
//this test will fail due to: Property [nightly.id] is not a valid property of class [examples.Result]
Nightly night = new Nightly(name:'nightly1', status:'Success')
night.save(validate:false)
Result res = new Result(status: 'SUCCESS', type: 'INTEGRATION')
res.nightly = night
res.save(validate:false, flush:true)
def count = Result.gimmeCountByNightlyAndStatusAndRerunIsNull(night, 'SUCCESS')
assertTrue count==0
}
}
上述代码来自于一个全新的Grails 2.2项目,由GGTS 3.1 创建。除上述代码外,项目中的其他一切都是完成锅炉板生成的。
我认为,因为它与实际的数据库相反,'nightly.id'将被转换为结果表的nightly_id列。
这是GORM如何在2.2中被嘲笑的问题,还是我们错过了某些东西?
你也可以张贴每晚的源代码和结果类 –
@drorb与实际类更新。 –