En Java/Junit, necesito probar null con algún objeto. Hay una variedad de formas en que puedo probar una condición, pero he estado usando assertTrue para la mayoría de mis pruebas. Cuando compruebo nulls en assertTrue, EclEmma afirma que solo está probando una rama.Falta de ramas al utilizar assertTrue en lugar de assertNull
Cuando resuelvo el enunciado en una variable de forma manual (como establecer el resultado en un booleano y pasarlo a assertTrue) la cobertura del código se considera completa en la afirmación pero no en la línea de inicialización de la variable.
¿Por qué sucede esto? ¿Esto está relacionado con el código de bytes adicionales que Java aparentemente agrega como se menciona en http://sourceforge.net/apps/trac/eclemma/wiki/FilteringOptions? Cualquier solución (además de usar otras declaraciones de afirmación).
assertTrue:
assertTrue(myObject == null); //1 of 2 branches
assertTrue:
boolean test = (myObject == null); //1 of 2 branches missing
assertTrue(test); // complete
assertNull:
assertNull(myObject) //complete;
Qué le pasa a valer cero mediante el uso de assertNull? Por lo general, es mejor usar el tipo de afirmación apropiado para lo que se afirma. Será mejor que veas lo que está mal cuando la prueba falla sin excavar demasiado en el código de prueba. – nansen
@nansen Esto es cierto y no tengo ningún problema para usar assertNull si es un requisito, sin embargo, IMO, todos los "tipos" afirmar son solo otra forma de assertTrue. Puede haber beneficios adicionales al uso de diferentes tipos de afirmaciones, como la información/legibilidad de errores añadida, pero eso no es realmente un problema aquí. –
@nansen Eso no quiere decir que me niegue a usar assertNull y probablemente lo use, solo encontré este problema en particular, ya que básicamente estoy probando lo mismo pero Emma da resultados completamente diferentes. –