有一个简单的课程
class Bean {
String name
}
和一个简单的groovy测试,使用mixin
import org.junit.Test
import static org.junit.Assert.assertEquals
import static org.junit.Assert.assertTrue
class SimpleTest {
@Test
void testGroovyMixin() {
Bean.mixin BeanCategory
Bean b1 = new Bean(name: 'b1')
Bean b2 = new Bean(name: 'b1')
assertTrue b1 == b2
assertTrue b1.equals(b2)
assertEquals b1, b2 // fails here
}
@Category(Bean)
static class BeanCategory {
boolean equals(Object obj) {
Bean that = (Bean) obj
this.name == that.name
}
}
}
为什么只有在junit类中调用equals方法时才会失败?
答案 0 :(得分:1)
junit中的assertEquals
方法将使用Java,因此没有元类的概念。
因此它将调用native equals方法并错过mixin