我正在将Java项目转换为Kotlin。我已将User
对象转换为Kotlin,并且当我使用Java运行现有的JUnit测试时,我在Kotlin User
对象的两个实例之间发生错误。Kotlin类实例声明不正确
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中比较不上科特林级正确。如果我通过一个调试器运行它,我可以看到domainObject1
和domainObject2
是不同的实例。
是否有可能让这个测试用例通过?其他Java类使用相同的测试用例,因此它必须适用于Java和Kotlin类。
如果您删除'data'关键字,失败的测试将通过,这是因为Kotlin [data class](https://kotlinlang.org/docs/reference/data-classes.html#data-classes)会生成'equals'方法来比较主构造函数中的属性。 –