【问题标题】:Problem with Grails Unit TestGrails 单元测试的问题
【发布时间】:2011-06-06 15:46:14
【问题描述】:

我有下一个测试:

void testRellenar() {
    Minibar m = new Minibar(categoria: 'Alta')
    Hotel h = new Hotel(precioIndividual: 40, precioDoble: 70, precioCamaSupletoria: 10, tasaNormal: 1, tasaAlta: 2, tasaBusiness: 1.3, tarifaLlamadaInternacional: 0.5, tarifaLlamadaNacional: 0.2, cantidadCerveza: 4, cantidadAgua:4, cantidadVino: 2, cantidadRefresco: 4, cantidadAlcohol: 4)
    Bebida b1 = new Bebida(tipo:"Tercio de Cerveza", precio:2)
    Bebida b2 = new Bebida(tipo:"Agua", precio:1.40)
    Bebida b3 = new Bebida(tipo:"Refresco", precio:2)
    Bebida b4 = new Bebida(tipo:"Vino", precio:10.50)
    Bebida b5 = new Bebida(tipo:"Alcohol", precio:5.20)
    def testInstances = [m]
    mockDomain(Minibar, testInstances)
    mockDomain(Hotel, [h])
    mockDomain(Bebida, [b1,b2,b3,b4,b5])
    h.save()
    b1.save()
    b2.save()
    b3.save()
    b4.save()
    b5.save()

    def srv = new MinibarService()
    srv.rellenarMinibar(m)
    def tipob = "Refresco"
    def resultado = srv.obtenerBebidaDisponible(m, "Refresco")

    assertNotSame resultado,0

}

但我得到下一个错误:

没有方法签名: org.uca.sanxer2011.services.MinibarService.obtenerBebidaDisponible() 适用于参数类型: (org.uca.sanxer2011.domain.application.Minibar, java.lang.String) 值: [org.uca.sanxer2011.domain.application.Consumibles : 1, 壁画]

服务 obtenerBebidaDisponible() 是:

def obtenerBebidaDisponible(Minibar minibar, String tipo) {
    def bebida = minibar.bebidas.find{ it.bebida.tipo == tipo }
    return bebida.cantidadDisponible
}

域 Minibar 是:

class Minibar extends Consumibles {

    static hasMany = [bebidas:Bebida_Minibar]
    static belongsTo = [habitacion:Habitacion]
    String categoria;

    static constraints = {
        categoria(inList:['Business', 'Alta', 'Normal'])
    }

    static mapping = {
        table 'minibar'
        categoria column: 'categoria'
        bebidasDisponibles column: 'bebidas_disponibles_id'
        bebidasConsumidas column: 'bebidas_consumidas_id'
        habitacion column: 'habitacion_id'
    }
}

【问题讨论】:

  • 您需要在您的服务中显示 obtenerBebidaDisponible 方法的方法签名。这只是一个错字吗?
  • 我把这段代码放多了。
  • 你有两个Minibar类吗?如果您尝试grails clean 会怎样?

标签: grails junit


【解决方案1】:

使用mockDomain() 之前(而不是之后)创建域类的实例 - 它为模拟域类创建不同的Class

另外,您不必向mockDomain() 提供第二个参数。

【讨论】:

  • 你好,结果是一样的。
  • 我放入第一行 mockDomain(Minibar) 。但结果是一样的:没有方法签名:org.uca.sanxer2011.services.MinibarService.obtenerBebidaDisponible() 适用于参数类型:(org.uca.sanxer2011.domain.application.Minibar, java.lang.String)值:[org.uca.sanxer2011.domain.application.Consumibles:null,Refresco]
  • 你把mockDomain()的第二个参数去掉了吗?
  • 是的,我将 mockDomain 放在实例之前,Minibar 为空,在所有示例中都在之后
猜你喜欢
  • 2016-08-23
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 2012-12-01
相关资源
最近更新 更多