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?

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(); } } 
  • ¿Existe alguna manera de usar junit.extensions.TestSetup para pruebas en Android?
  • Robolectric - cómo desactivar una prueba de unidad?
  • JUnit assertThat: comprueba que Object sea igual a String
  • Obtenga el contexto del proyecto de prueba en el caso de prueba de Android junit
  • JUnit4 TextUtils.isEmpty () da un resultado diferente que String.isEmpty ()
  • Cómo ejecutar pruebas en un fragmento de actividades
  • Android Studio - con Junit 4.12 "!!! JUnit versión 3.8 o posterior esperado: "
  • Pruebas de Android con Gradle: Cambie el nombre de archivo de salida de prueba de JUnit
  • Android: pruebas de instumentación para widgets de aplicaciones
  • Gradle JUnit Espresso en el emulador connectedAndroidTest java.lang.IncompatibleClassChangeError
  • Error "no tiene público TestCase (String nombre) o TestCase () en Junit prueba
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.