私はJavaプロジェクトをKotlinに変換しています。 User
オブジェクトをKotlinに変換しました.JotnitテストをJavaで実行すると、Kotlin User
オブジェクトの2つのインスタンス間でエラーが発生します。Kotlinクラスのインスタンスが正しくアサートされない
User.kt:私はJavaの比較でKotlinクラスに正しく行われないと信じて
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)
テストは、失敗します。これをデバッガで実行すると、domainObject1
とdomainObject2
が異なるインスタンスであることがわかります。
このテストケースを通過させることは可能ですか?他のJavaクラスに対しても同じテストケースが使用されるため、JavaクラスとKotlinクラスの両方で動作する必要があります。
'data'キーワードを削除した場合、失敗したテストは合格となります。これはKotlin [data class](https://kotlinlang.org/docs/reference/data-classes.html#data-classes)がプライマリコンストラクタのプロパティと比較するために 'equals'メソッドを生成します。 –