¿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.assertTruediríaexpected true got false, Hamcrest diríaexpected instanced of XYZ, got instance of ABCRespuestas:
Puede usar el
assertThatmé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 porqueSubClassno 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
assertThatque la respuesta anterior ahora está en desuso, estoy publicando la solución correcta:assertTrue(objectUnderTest instanceof TargetObject);fuente
truecorrecto? 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.instanceOfcomoinstanceof(fíjate en el caso).instanceOfes una función mientras queinstanceofes una palabra clave Java .¡Solución para JUnit 5 para Kotlin!
Ejemplo para Hamcrest :
Ejemplo para AssertJ :
fuente