我们通过Gradle运行集成测试时得到了这个泡菜。 我们正在使用dbunit和Spock。
由于某种原因,动态添加到域类的特征方法不存在,这会导致抛出MissingProperty异常。
从IntelliJ内部运行时,JUnit正确地将特征方法应用于域类。另外,如果我们添加@TestFor(无论),那么一切正常。我的猜测是整个Grails应用程序正在加载到其他情况下,或类似的东西。
有人曾经遇到过这样的问题吗?任何见解将不胜感激。
以下是我们要完成的一些片段:
这是域类:
package b.c.c.e
import b.c.c.e.conferencia.Conferencia
import b.c.w.d.SerializableDomain
class Endereco implements SerializableDomain, EnderecoFinder {
String endereco
String enderecoCompleto
Endereco enderecoPai
String descricao
Boolean permiteEntrada
Boolean permiteRetirada
Boolean disponivelVenda
Estoque estoque
Boolean raiz
Boolean folha
Set filhos
static hasMany = [
filhos : Endereco,
lpns : Lpn,
conferencias: Conferencia
]
static constraints = {
endereco shared: "required", maxSize: 100
enderecoCompleto shared: "required", maxSize: 1000
descricao maxSize: 1000
permiteEntrada shared: "required"
permiteRetirada shared: "required"
disponivelVenda shared: "required"
raiz shared: "required"
folha shared: "required"
}
@Override
String toString() {
"$enderecoCompleto"
}
}
这是Trait,它来自我们放在grails-app文件夹中的Finder层(不确定这可能是个问题)。
package b.c.c.e
import b.c.c.e.conferencia.StatusConferencia
import org.hibernate.sql.JoinType
trait EnderecoFinder {
static namedQueries = {
obterFilhos { id ->
enderecoPai {
eq "id", id
}
}
}
}
这是测试规范:
package b.c.c.e.endereco
import b.c.c.e.CategoriaEstoque
import b.c.c.e.Endereco
import b.c.c.e.conferencia.StatusConferencia
import b.c.w.g.test.LoadDataSet
// This LoadDataSet is an AST transformation we apply to cleanup the database after each feature.
import grails.test.mixin.integration.Integration
import grails.transaction.Rollback
import spock.lang.Specification
@Integration
@Rollback
@LoadDataSet("0_5_Enderecos")
class EnderecoFinderIntegrationSpec extends Specification {
def "#obterFilhos: Obtém os nós que são descendentes diretos de um dado endereço"() {
setup:
def enderecoPaiId = 1L
when: "Executado o método list no critério obterFilhos da entidade Endereco"
// MissingProperty exception thrown here
def filhos = Endereco.obterFilhos(enderecoPaiId).list()
then: "São listados todos os endereços cujo pai é o endereco do id informado"
filhos.each {
it.enderecoPai.id == enderecoPaiId
}
}
}