Ich konvertiere ein Java-Projekt in Kotlin. Ich habe ein User
Objekt in Kotlin umgewandelt und wenn ich die vorhandenen JUnit Tests in Java starte, erhalte ich einen Fehler zwischen zwei Instanzen des Kotlin User
Objekts.Kotlin Klasse Instanz Assert nicht korrekt
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);
}
}
Der assertThat(domainObject1).isNotEqualTo(domainObject2)
Test nicht besteht, wie ich in Java Vergleich glauben nicht korrekt auf der Kotlin Klasse getan. Wenn ich dies durch einen Debugger durchführe, kann ich sehen, dass domainObject1
und domainObject2
unterschiedliche Instanzen sind.
Ist es möglich, diesen Testfall zu bestehen? Derselbe Testfall wird für andere Java-Klassen verwendet, er muss also sowohl für Java- als auch für Kotlin-Klassen funktionieren.
Wenn Sie die Schlüsselwörter 'data' entfernen, wird der fehlgeschlagene Test bestanden, weil Kotlin [Datenklasse] (https://kotlinlang.org/docs/reference/data-classes.html#data-classes) dies tut generiert 'equals'-Methode zum Vergleich mit Eigenschaften im primären Konstruktor. –