我观察到一个断言失败,我试图在下面画出来。简而言之,当我调用重写方法时,初始化的类成员变为空虚假。
abstract class A<T> {
T target
def something() {
assert target != null // sanity check -- fails when invoked below
return this
}
}
class B extends A<Something> {
static B makeB() {
def b = new B()
b.target = new Something();
assert b.target != null
return b
}
}
// package test
// Test code
//
def b = B.makeB() // <-- success.
assert b != null
assert b.target != null
b.something() // <-- fails assertion
print "Success!"
我在制作最小测试用例时遇到问题 - 以上(使用Long代替 Something )在compileonline.com 上成功运行,但在我们的代码中没有运行机
如果我在子类B中重新实现something
方法,问题就会消失。
有人观察到类似的效果吗?我已经非常沮丧了。
答案 0 :(得分:0)
仔细检查代码并仔细检查本地堆栈变量,我们发现 Grails Integration Test Mixin有一个实例变量target
正在接收分配消息。据推测,任何实例使用mixin实例变量共享名称的变量应该遵循我上面描述的行为,但我们不知道完整的条件集
时间最合理的解决方案(点头@cfrick)是将变量target
重命名为其他内容。