¿Es posible en JUnit afirmar que un objeto es una instancia de una clase? Por varias razones, tengo un objeto en mi prueba que quiero verificar el tipo de. ¿Es un tipo de Object1 o un tipo de Object2?
Actualmente tengo:
assertTrue(myObject instanceof Object1);
assertTrue(myObject instanceof Object2);
Esto funciona, pero me preguntaba si hay una forma más expresiva de hacerlo.
Por ejemplo algo como:
assertObjectIsClass(myObject, Object1);
Yo podría hacer esto:
assertEquals(myObject.class, Object1.getClass());
¿Existe un método de afirmación específico que me permita probar un tipo de objeto de una manera más elegante y fluida?
java
unit-testing
junit
RNJ
fuente
fuente
assertTrue(myObject instanceof Object1);
y enassertEquals(myObject.class, Object1.getClass());
realidad son pruebas diferentes? El primero acepta que myObject es una instancia de una subclase deObject1
, el segundo no.assertTrue
.assertTrue
diríaexpected true got false
, Hamcrest diríaexpected instanced of XYZ, got instance of ABC
Respuestas:
Puede usar el
assertThat
método y los Matchers que vienen con JUnit.Eche un vistazo a este enlace que describe un poco acerca de los JUnit Matchers.
Ejemplo:
Prueba:
fuente
instanceof
:,BaseClass subClass = new SubClass(); assertThat(subClass, isA(SubClass.class));
pero no se compila porqueSubClass
no lo es? super BaseClass
.instanceOf(BaseClass.class)
ainstanceOf(String.class)
y verás que se compila muy bien, pero se lanzará un AssertionError.Class<T>
lugar deClass<?>
(que es lo que hace instanciaOf). Como captura la clase, sería un error de tiempo de compilación hacer isA con una clase incompatible con la instancia. github.com/hamcrest/JavaHamcrest/issues/39Dado
assertThat
que la respuesta anterior ahora está en desuso, estoy publicando la solución correcta:assertTrue(objectUnderTest instanceof TargetObject);
fuente
true
correcto? Y creo que quieres probar el tipo real.Solución para JUnit 5
La documentación dice:
Ejemplo para Hamcrest :
Ejemplo para AssertJ :
Tenga en cuenta que esto supone que desea probar comportamientos similares a
instanceof
(que acepta subclases). Si desea un tipo igual exacto, no veo una mejor manera que afirmar que las dos clases son iguales como mencionó en la pregunta.fuente
assertThat()
se difiere a Hamcrest, por lo que JUnit también funciona con bibliotecas de afirmaciones de terceros.instanceOf
comoinstanceof
(fíjate en el caso).instanceOf
es una función mientras queinstanceof
es una palabra clave Java .¡Solución para JUnit 5 para Kotlin!
Ejemplo para Hamcrest :
Ejemplo para AssertJ :
fuente