support last android junit android-fragments android-support-library

android - last - FragmentActivity no se puede probar a través de ActivityInstrumentationTestCase2



com.android.support:design 26 (3)

La respuesta IntelliJ de Rupert no me ayudó a llegar hasta allí. Resolví esto exportando el jar como lo sugirió la respuesta de Eclipse.

Archivo> Estructura del proyecto> Módulos> [seleccione su aplicación principal]> pestaña de dependencias> haga clic en la casilla de verificación exportar al lado del contenedor de soporte

Tengo un problema al ejecutar las pruebas de la unidad de android contra las aplicaciones de Android que utilizan la API de compatibilidad de Fragment recientemente lanzada. Cuando la prueba se ejecuta contra una FragmentActivity, el siguiente error aparece en el registro y la clase no se carga. Cuando se ejecuta contra una clase idéntica, pero una derivada de la actividad, la prueba funciona bien. ¡Ambas clases funcionan correctamente como aplicaciones! Lo que significa que cuando se invoca simplemente ambos muestran su diseño y función correctamente. El contenedor de soporte es parte de la ruta de compilación e incluido en el proyecto.

El problema que tengo es que la única forma de utilizar fragmentos (y compatible con Android pre3.0) es utilizar FragmentActivity, pero si eso excluye las pruebas automatizadas, ¿de qué sirve esta biblioteca?

4-05 18:00:11.276: WARN/dalvikvm(1095): Class resolved by unexpected DEX: Lcom/example/android/app/FragmentLayoutSupport;(0x406351a0):0x12e5c8 ref [Landroid/support/v4/app/FragmentActivity;] Landroid/support/v4/app/FragmentActivity;(0x406351a0):0x12e440 04-05 18:00:11.276: WARN/dalvikvm(1095): (Lcom/example/android/app/FragmentLayoutSupport; had used a different Landroid/support/v4/app/FragmentActivity; during pre-verification) 04-05 18:00:11.286: WARN/dalvikvm(1095): Unable to resolve superclass of Lcom/example/android/app/FragmentLayoutSupport; (49) 04-05 18:00:11.286: WARN/dalvikvm(1095): Link of class ''Lcom/example/android/app/FragmentLayoutSupport;'' failed 04-05 18:00:11.286: ERROR/dalvikvm(1095): Could not find class ''com.example.android.app.FragmentLayoutSupport'', referenced from method com.example.android.app.test.FrameLayoutTest.<init> 04-05 18:00:11.286: WARN/dalvikvm(1095): VFY: unable to resolve const-class 131 (Lcom/example/android/app/FragmentLayoutSupport;) in Lcom/example/android/app/test/FrameLayoutTest;

Aquí está el código que construí para demostrar el problema. El caso de prueba simplemente intenta crear una instancia de la clase bajo prueba:

FrameLayoutTest.java public class FrameLayoutTest extends ActivityInstrumentationTestCase2<FragmentLayoutSupport> { public FrameLayoutTest() { super(FragmentLayoutSupport.class); } public void testActivityTestCaseSetUpProperly() { assertNotNull("activity should be launched successfully", getActivity()); } }

Las dos clases que he creado son las siguientes y fragment_layout es un LinearLayout vacío:

FrameLayout.java public class FragmentLayout extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_layout); } }

Y

FragmentLayoutSupport.java public class FragmentLayoutSupport extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_layout); } }


Para cualquier usuario de IntelliJ que se encuentre con este problema, la solución equivalente es establecer el alcance de su dependencia en ''Provided'' de la siguiente manera:

Archivo> Estructura del proyecto> Módulos> [seleccione su aplicación de prueba]> pestaña de dependencias> seleccione ''Provisto'' en el menú desplegable del alcance.


Pasé la mitad de la noche en esto, y finalmente encontré una solución. La línea clave es:

04-05 18:00:11.276, (Lcom/example/android/app/FragmentLayoutSupport; had used a different Landroid/support/v4/app/FragmentActivity; during pre-verification).

El problema es que el android-support-v4.jar que está utilizando en su proyecto de prueba es diferente al de su proyecto de aplicación. Elimine todas las referencias a android-support-v4.jar de su proyecto de prueba. Luego vaya a su proyecto de aplicación Propiedades-> Ruta de compilación de Java-> Ordenar y exportar y revise android-support-v4.jar para exportarlo. Ahora ambos proyectos usarán la misma biblioteca, y Dalvik no se quejará.