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.

  • ¿Se puede usar un método de la class de datos Kotlin equals () sin más modificaciones junto con JPA?
  • ¿Cuál es la forma correcta de configurar y generar una database con datos artificiales para testings de integración?
  • Android Studio 3.0 Canary 1: las testings de Kotlin o las testings de Java que se refieren a las classs de Kotlin fallan
  • ¿Cómo crear una nueva list de anteras en kotlin?
  • Botón de dialog Anko titile
  • La database de Firebase siempre está fuera de línea, cuando se testing en un dispositivo Android físico
  • ¿Convertir mi proyecto de estudio andorid existente a kotlin?
  • ¿Por qué hay NoClassDefFoundError con una class que existe?
  • Fondo de relleno de Android AlertDialog
  • Cuándo es posible omitir el tipo de devolución en Kotlin
  • ¿Cómo puedo establecer una propiedad de un object complementario en Kotlin a través de la reflexión?