【发布时间】:2015-12-16 13:23:44
【问题描述】:
我有一个带有域类 Monster 的 grails 2.2.4 应用程序:
class Monster {
int aggression
}
我可以像这样模拟和测试它:
import spock.lang.*
class MonsterSpec extends Specification {
def "property mocks work"() {
given:
def m = Mock(Monster)
m.aggression >> 5
expect:
m.aggression == 10
}
}
最近我决定给它一个抽象基类(而不是一个域对象本身),这样我就可以在我的许多Monster-like 类之间共享方法实现:
abstract class Entity {} // Not under /domain
class RefactoredMonster extends Entity {
int aggression
}
但是随后一千个简单的测试都失败了,就像这样:
import spock.lang.*
class MonsterSpec extends Specification {
def "property mocks work"() {
given:
def m = Mock(RefactoredMonster)
m.aggression >> 10
expect:
m.getAggression() == 10 // This works
and:
m.aggression == 10 // This fails! m.aggression is null!
}
}
到底发生了什么?如果我制作Entity 混凝土,问题就会消失,但是当然我不能水合任何Monster 对象,因为Hibernate 不知道如何处理Entity(而且我不想制作@987654330 @ 一个域对象,虽然我想如果我真的必须这样做)。
我错过了什么?
【问题讨论】:
-
你能发布你的堆栈跟踪吗..
-
没有堆栈跟踪,测试只是失败,因为
m.aggression为空,而不是10应该是这样。错误消息只是普通的“条件不满足”Spock 失败。