AndroidJUnit4.class + org.junit.Assume.assumeTrue = AssumptionViolatedException

He conseguido que mi proyecto de Android pasara a JUnit4 y, por supuesto, la razón principal por la que quería hacerlo no funcionaba. Me encantaría cualquier ayuda si alguien tiene ideas aquí.

El problema que estoy tratando de resolver es que quiero omitir automáticamente ciertas pruebas si la compilación no está señalada en el servidor de ensayo. Tengo esta configuración con un BUILD_TYPE que está usando gradle para inyectar la URL base.

Configurar una cláusula de assumeThat en mi configuración que identifica correctamente cuando la compilación no es la puesta en escena, pero en lugar de detener e ignorar el resto de la prueba, lanza una excepción y falla.

Esta es mi clase base para mis pruebas de API en vivo – He anotado descendiendo de esto con @RunWith(AndroidJUnit4.class) , por lo que en teoría esto siempre debe ejecutarse con el corredor JUnit4:

 package com.[my package].nonuitests.liveservertests; import android.support.test.runner.AndroidJUnit4; import com.[my package].nonuitests.BaseAndroidTest; import org.junit.Test; import org.junit.runner.RunWith; /** * Tests against the live API. All tests descending from this class will * be ignored if the BUILD_TYPE is not staging. */ @RunWith(AndroidJUnit4.class) public class BaseLiveServerTests extends BaseAndroidTest { private static final String STAGE = "staging"; /****************** * SETUP/TEARDOWN * ******************/ @Override public void setUp() throws Exception { super.setUp(); //TODO: YU NO WORK?! //This should cause the rest of the test to be skipped if it fails, //but is instead throwing an AssumptionViolatedException. assumeTrue(STAGE.equals(BuildConfig.BUILD_TYPE)); } } 

Por lo tanto, mis preguntas:

  1. ¿Hay una mejor manera de hacer esto? En teoría esto podría hacerse con sabores, pero yo estaba tratando de que antes y que todo lo demás forma más complicada.
  2. Mi investigación indica que hay algún tipo de cosa que Google no está implementando en su corredor que está causando esto para bombardear, pero estoy teniendo un infierno de tiempo averiguar lo que puedo / debería hacer para solucionar esto. ¿Alguna sugerencia de cosas que debería subclase para que esto funcione como se esperaba?

Cualquier otro pensamiento sería más apreciado. ¡Gracias!

Edit (1/26/15 11:40 am CST): Por la sugerencia de Grzesuav , tomé una puñalada en la implementación de esto como un @Rule , pero por el momento todavía no está funcionando. Esto parece un camino prometedor, pero no está funcionando en este momento.

Editar 2 (1/26/15 12:15 pm CST): OK, ahora está funcionando .

2 Solutions collect form web for “AndroidJUnit4.class + org.junit.Assume.assumeTrue = AssumptionViolatedException”

https://github.com/junit-team/junit/wiki/Assumptions-with-assume

Ad 2) Los corredores personalizados podrían diferentemente tratar la declaración de asumir. Para solucionarlo debe escribir su propia versión de Android runner e implementar una forma de tratar con asume como nativo JUnit corredor hace o hacer un error para el corredor de prueba de Android.

Ad 1) Sugerido por mí: intente usar las reglas de JUnit:

http://www.codeaffine.com/es/junit-rule/

OK, finalmente lo consiguió trabajando con @Rules por la sugerencia de Grzesuav , aunque con cambios significativos desde MethodRule ha sido obsoleta. Aquí está una idea de lo que resultó ser – Voy a tratar de mantener que actualizado como lo perfecciono.

Algunas notas importantes:

  1. Tienes que instanciar tu @Rule en tu clase de prueba, o nunca vas a golpear cualquiera de tus cheques.
  2. A partir de ahora, esto no marcará la prueba como ignorado en Android, simplemente pasará sin probar nada.
  • Prueba JUnit con Robolectric: java.lang.InstantiationException
  • Recursos $ NotFoundException al llamar a Robolectric.buildActivity ()
  • ActivityInstrumentationTestCase2 vs ActivityTestRule
  • No se puede ejecutar JUnit 4 caso de prueba en el proyecto Eclipse Android
  • GetSupportActionBar () devuelve null con Robolectric
  • ¿Hay una manera de ejecutar la prueba de Espresso con múltiples métodos de prueba pero sólo un método de configuración?
  • Prueba del código de Android con JUnit y el JDK
  • Espresso cómo hacer clic en un ImageView colocado en el primer elemento de la lista?
  • Prueba de clases sin actividad en Android
  • Android Studio simple Unidad de prueba no funciona
  • Prueba de Android JUnit4
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.