Тестирование проекта, использующего ActionBarSherlock

Моя установка:

  1. Проект библиотеки :ActionBarSherlock
  2. Проект
  3. Тестовый проект

В моем проекте проект библиотеки связан как проект библиотеки. Он компилируется и работает нормально.

Теперь я пытаюсь протестировать свое приложение, используя обычный тестовый проект. Запуск тестов в eclipse работает отлично. Если я попытаюсь запустить тесты с помощью ant, тестовый проект даже не скомпилируется.:

[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 {
[javac]                                                                        ^
[javac] LoginActivityTest.java:25: cannot find symbol

Сборка через eclipse работает идеально, и тест тоже работает идеально.

Если я свяжу проект библиотеки с моим тестовым проектом, он скомпилируется с помощью ant, но тесты не пройдут.

 [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.(LoginActivityTest.java:18)
 [exec]    ... 19 more

Мой тестовый класс:

public class LoginActivityTest extends ActivityInstrumentationTestCase2 {

    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);
    }
}

Есть идеи, как это исправить?

Обновление :похоже, что сборка/тестирование ant по-прежнему не работает. Согласно этой записи в блоге о тестировании проекта библиотеки большинство из 7 перечисленных проблем будут исправлены в следующем выпуске ADT (ADT r20 ).

5
задан WarrenFaith 25 April 2012 в 10:34
поделиться