La instancia de la class Kotlin no es correcta

Estoy convirtiendo un proyecto de Java en Kotlin. He convertido un object User en Kotlin y cuando ejecuto las testings JUnit existentes en Java recibo un error entre dos instancias del object 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); } } 

La assertThat(domainObject1).isNotEqualTo(domainObject2) falla, ya que creo que la comparación de Java no se realiza correctamente en la class Kotlin. Si ejecuto esto a través de un depurador, puedo ver que domainObject1 y domainObject2 son instancias diferentes.

¿Es posible hacer pasar este caso de testing? El mismo caso de testing se usa para otras classs de Java, por lo que debe funcionar tanto para las classs de Java como de Kotlin.

Las llamadas isNotEqualTo equals . La class Kotlin implementa el método de equals correcto para data class . Entonces domainObject1.equals(domainObject2) es verdadero. Este comportamiento es correcto.

solo mira el documento AssertJ:

 isNotSameAs(Object other): Verifies that the actual value is not the same as the given one, ie using == comparison. 

Creo que deberías intentarlo:

  assertThat(domainObject1).isNotSameAs(domainObject2); 

En Kotlin, equals() se genera automáticamente para data class para verificar la igualdad de las properties.

Cita de "Kotlin en acción":

El método equals () generado comtesting que los valores de todas las properties son iguales. … Tenga en count que las properties que no están declaradas en el constructor principal no participan en las verificaciones de igualdad y el cálculo del código hash.

Si desea pasar el caso de testing sin modificarlo, puede anular equals() de su class de datos para verificar la igualdad referencel .

 override fun equals(other: Any?) = this === other 

Tenga en count que puede afectar a su otro código, si existe alguna function que dependa de la igualdad estructural de su class de datos. Entonces, sugiero que se refiera a la respuesta de @ shawn para cambiar su caso de testing.

  • ¿Cómo acceder a "Activity.this" en Kotlin?
  • Jackson Mixins con Kotlin
  • ¿Cómo volver a escribir esta class de Java en una class de datos de Kotlin?
  • ¿Cuál es el objective pnetworkingeterminado para una anotación al anotar properties en Kotlin?
  • Captura de objects con JMockit y Kotlin
  • Android Studio 1.5 con Kotlin Plugin recibió una exception, cuando está en modo debugging. ¿Como arreglarlo?
  • Diseñando elementos HTML en Kotlin-js
  • cómo convertir a NotNull usando enum en Kotlin
  • Error de compilation: Smart Cast para '<tipo>' es imposible, porque '<variable>' es una variable local que se captura mediante un cierre cambiante
  • Manejo de la plantilla de FreeMaker con Ktor Kotlin
  • Kotlin REST a las definiciones de mecanografía