Groovy mixin与junit奇怪的行为一起使用

时间:2014-08-14 10:15:27

标签: groovy mixins

有一个简单的课程

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方法时才会失败?

1 个答案:

答案 0 :(得分:1)

junit中的assertEquals方法将使用Java,因此没有元类的概念。

因此它将调用native equals方法并错过mixin