【发布时间】:2017-08-15 14:45:53
【问题描述】:
我正在将一个 Java 项目转换为 Kotlin。我已将 User 对象转换为 Kotlin,当我在 Java 中运行现有的 JUnit 测试时,我在 Kotlin User 对象的两个实例之间遇到错误。
User.kt:
data class User (
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
var id: Long? = null,
...
)
TestUtil.java
import static org.assertj.core.api.Assertions.assertThat;
public class TestUtil {
public static void equalsVerifier(Class clazz) throws Exception {
Object domainObject1 = clazz.getConstructor().newInstance();
// Test with an instance of the same class
Object domainObject2 = clazz.getConstructor().newInstance();
assertThat(domainObject1).isNotEqualTo(domainObject2);
}
}
assertThat(domainObject1).isNotEqualTo(domainObject2) 测试失败,因为我相信 Java 比较在 Kotlin 类上没有正确完成。如果我通过调试器运行它,我可以看到 domainObject1 和 domainObject2 是不同的实例。
这个测试用例有可能通过吗?相同的测试用例用于其他 Java 类,因此它必须同时适用于 Java 和 Kotlin 类。
【问题讨论】:
-
如果你删除了
data关键字,失败的测试将通过,这是因为 Kotlin data class 将生成equals方法来与主构造函数中的属性进行比较。
标签: kotlin