Mi configuración:Comprobación de un proyecto que utiliza ActionBarSherlock
- proyecto de la Biblioteca: ActionBarSherlock
- Proyecto
- proyecto de prueba
Mi proyecto tiene el proyecto de biblioteca vinculado como un proyecto de biblioteca. Se compila y funciona bien.
Ahora trato de probar mi aplicación usando un proyecto de prueba normal. Ejecutar las pruebas en eclipse funciona perfecto. Si trato de ejecutar las pruebas utilizando hormiga, el proyecto de prueba ni siquiera compilar:
[javac] LoginActivityTest.java:9: cannot access com.actionbarsherlock.app.SherlockActivity
[javac] class file for com.actionbarsherlock.app.SherlockActivity not found
[javac] public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {
[javac] ^
[javac] LoginActivityTest.java:25: cannot find symbol
edificio a través de Eclipse funciona perfecto y la prueba se ejecuta perfecto, también.
Si vinculo el proyecto de la biblioteca a mi proyecto de prueba, se compila con la hormiga pero las pruebas fallan.
[exec] Error in testSuiteConstructionFailed:
[exec] java.lang.RuntimeException: Exception during suite construction
[exec] at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:238)
[exec] at java.lang.reflect.Method.invokeNative(Native Method)
[exec] at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
[exec] at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
[exec] at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:537)
[exec] at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)
[exec] Caused by: java.lang.reflect.InvocationTargetException
[exec] at java.lang.reflect.Constructor.constructNative(Native Method)
[exec] at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
[exec] at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87)
[exec] at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73)
[exec] at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:262)
[exec] at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184)
[exec] at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:371)
[exec] at com.zutubi.android.junitreport.JUnitReportTestRunner.onCreate(JUnitReportTestRunner.java:90)
[exec] at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3891)
[exec] at android.app.ActivityThread.access$1300(ActivityThread.java:122)
[exec] at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184)
[exec] at android.os.Handler.dispatchMessage(Handler.java:99)
[exec] at android.os.Looper.loop(Looper.java:137)
[exec] at android.app.ActivityThread.main(ActivityThread.java:4340)
[exec] at java.lang.reflect.Method.invokeNative(Native Method)
[exec] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
[exec] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
[exec] at dalvik.system.NativeStart.main(Native Method)
[exec] Caused by: java.lang.NoClassDefFoundError: com.myproject.android.app.activities.LoginActivity
[exec] at com.myproject.android.app.test.LoginActivityTest.<init>(LoginActivityTest.java:18)
[exec] ... 19 more
Mi clase de prueba:
public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {
private LoginActivity mActivity;
private EditText mTextUserName;
private EditText mTextUserPassword;
public LoginActivityTest() {
// the super call is line 18 (see stack trace above)
super("com.myproject.android.app.activities", LoginActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
mTextUserName = (EditText) mActivity.findViewById(com.myproject.android.app.R.id.login_activity_username);
mTextUserPassword = (EditText) mActivity.findViewById(com.myproject.android.app.R.id.login_activity_password);
}
public void testPreConditions() {
assertTrue("Activity is null!", mActivity != null);
}
public void testLogin() throws Throwable {
mActivity.runOnUiThread(new Runnable() {
public void run() {
mTextUserName.setText("username");
mTextUserPassword.setText("password");
}
});
sendKeys(KeyEvent.KEYCODE_ENTER);
}
}
Algunas ideas de cómo puedo solucionar este problema?
Actualización: parece que la construcción/prueba de la hormiga sigue siendo un desastre. De acuerdo con esta entrada del blog sobre testing a library project, la mayoría de los 7 problemas mencionados se solucionarán en la próxima versión de ADT (ADT r20).