Grails-Gradle集成测试问题

时间:2016-09-16 12:26:47

标签: grails gradle integration-testing spock dbunit

我们通过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
      }
  }
}

0 个答案:

没有答案
相关问题