Ignorar las pruebas de la unidad de Android dependiendo del nivel de SDK
¿Hay una anotación o alguna otra forma conveniente de ignorar las pruebas junit para versiones específicas de SDK de Android? ¿Hay algo similar a la anotación Lint TargetApi (x)? ¿O debo comprobar manualmente si ejecutar la prueba utilizando la función Build.VERSION?
- La prueba de Android JUnit de Simpe se cuelga en Eclipse
- Prueba de la unidad de Android que no informa Fallando con error ()
- ¿Es posible ejecutar pruebas de unidad de Android Espresso en métodos anotados @BeforeClass?
- ¿Cómo ejecutar una prueba JUnit4 simple en Android Studio 1.1?
- Se ha producido un error en la ejecución de la prueba: no se pudo completar la prueba. Se esperan 1 pruebas, recibidas 0
- Android Robotium - ¿Cómo administrar el orden de ejecución de los testcases?
- Eclipse lanza java.lang.NullPointerException en la creación de la configuración de prueba de android junit
- Excepción de tiempo de ejecución en las pruebas de Android JUnit
- Android y JUnit: ¿Cómo agregar pruebas individuales al conjunto de pruebas?
- Unidad de prueba SparseArray utilizando JUnit (utilizando JVM)
- Java.lang.NoClassDefFoundError mientras ejecuta la prueba JUnit en Netbeans
- CalledFromWrongThreadException realizando pruebas JUnit en Android
- ¿Es posible definir Actividad dentro del proyecto de prueba de Android y ejecutar una prueba contra ella?
No creo que haya algo listo, pero es bastante fácil crear una anotación personalizada para esto.
Cree su anotación personalizada
@Target( ElementType.METHOD ) @Retention( RetentionPolicy.RUNTIME) public @interface TargetApi { int value(); }
Ovverride el corredor de prueba (que comprobará el valor y eventualmente ignorará / disparará la prueba)
public class ConditionalTestRunner extends BlockJUnit4ClassRunner { public ConditionalTestRunner(Class klass) throws InitializationError { super(klass); } @Override public void runChild(FrameworkMethod method, RunNotifier notifier) { TargetApi condition = method.getAnnotation(TargetApi.class); if(condition.value() > 10) { notifier.fireTestIgnored(describeChild(method)); } else { super.runChild(method, notifier); } } }
Y marca tus pruebas
@RunWith(ConditionalTestRunner.class) public class TestClass { @Test @TargetApi(6) public void testMethodThatRunsConditionally() { System.out.print("Test me!"); } }
Sólo probado, funciona para mí. 🙂
Créditos a: Ignorar condicionalmente las pruebas de JUnit
He estado buscando una respuesta a esta pregunta, y no he encontrado una mejor manera que para comprobar la versión. Pude suprimir condicionalmente la ejecución de la lógica de la prueba poniendo una comprobación en los métodos androides de TestCase
siguientes. Sin embargo, esto realmente no impide que las pruebas individuales se ejecuten. runTest()
método runTest()
esta manera hará que las pruebas "pasen" en los niveles de API que sabe que no funcionarán. Dependiendo de la lógica de su prueba, es posible que desee anular tearDown()
también. Tal vez alguien ofrecerá una solución mejor.
@Override protected void setUp() throws Exception { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { if (Log.isLoggable(TAG, Log.INFO)) { Log.i(TAG, "This feature is only supported on Android 2.3 and above"); } } else { super.setUp(); } } @Override protected void runTest() throws Throwable { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { assertTrue(true); } else { super.runTest(); } }
- Dibuja un mapa de bits en mosaico a través de un androide Rect
- ¿Cómo encadenar la animación en android a la misma vista?