2017-01-22 1 views
5

Я использую org.assertj:assertj-core:3.6.2 для проверки моего проекта андроида. Согласно offical ducoment, я должен использовать java 8 с assertj 3.x.файл класса для java.nio.file.Path не найден

Вот мой тестовый класс, я пытаюсь проверить, когда щелчок, выполненный кодом, может начать ожидаемую активность.

import android.content.Intent; 

import org.assertj.core.api.Assertions; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.robolectric.Robolectric; 
import org.robolectric.RobolectricTestRunner; 
import org.robolectric.Shadows; 
import org.robolectric.annotation.Config; 
import org.robolectric.shadows.ShadowActivity; 

@RunWith(RobolectricTestRunner.class) 
@Config(constants = BuildConfig.class, sdk = 21) 
public class LoginActivityTest { 

    @Test 
    public void testBtnLogin(){ 
     LoginActivity loginActivity = Robolectric.setupActivity(LoginActivity.class); 

     loginActivity.findViewById(R.id.btnLogin) 
       .performClick(); 

     Intent expectedIntent = new Intent(loginActivity,MainActivity.class); 
     ShadowActivity shadowActivity = Shadows.shadowOf(loginActivity); 
     Intent actualIntent = shadowActivity.getNextStartedActivity(); 
     Assertions.assertThat(actualIntent).isEqualTo(expectedIntent); 
    } 
} 

Но когда я запускаю тест, я получил эту ошибку:

:app:compileDebugUnitTestJavaWithJavac (Thread[Daemon worker,5,main]) started. 
:app:compileDebugUnitTestJavaWithJavac 
file or directory '/home/workspace/android/AndroidLib/app/src/testDebug/java', not found 
Executing task ':app:compileDebugUnitTestJavaWithJavac' (up-to-date check took 0.006 secs) due to: 
    Output file /home/workspace/android/AndroidLib/app/build/intermediates/classes/test/debug/com/cavalry/androidlib/sample/ui/activity/LoginActivityTest.class has been removed. 
All input files are considered out-of-date for incremental task ':app:compileDebugUnitTestJavaWithJavac'. 
Compiling with source level 1.7 and target level 1.7. 
file or directory '/home/workspace/android/AndroidLib/app/src/testDebug/java', not found 
Compiling with JDK Java compiler API. 

/home/workspace/android/AndroidLib/app/src/test/java/com/cavalry/androidlib/sample/ui/activity/LoginActivityTest.java:43: error: cannot access Path 
     Assertions.assertThat(actualIntent).isEqualTo(expectedIntent); 
       ^
    class file for java.nio.file.Path not found 
1 error 

:app:compileDebugUnitTestJavaWithJavac FAILED 
:app:compileDebugUnitTestJavaWithJavac (Thread[Daemon worker,5,main]) completed. Took 0.556 secs. 

я искал на Google и нашел, что может привести к неправильной версии Java (я на самом деле действительно не уверен, что).

Вот некоторая информация о моей Java конфигурации:

$ java -version 
java version "1.8.0_112" 
Java(TM) SE Runtime Environment (build 1.8.0_112-b15) 
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode) 

$ javac -version 
javac 1.8.0_112 


$ update-alternatives --config java 
There are 2 choices for the alternative java (providing /usr/bin/java). 

    Selection Path           Priority Status 
------------------------------------------------------------ 
* 0   /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071  auto mode 
    1   /home/java/jdk1.8.0_112/bin/java     300  manual mode 
    2   /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071  manual mode 

А в структуре проекта, я ALSE набор JDK для jdk1.8.0_112 enter image description here

Если это было вызвано версии Java, что мне делать? Если нет, то что мне делать?

+7

В Android используется этот статический импорт: 'import static org.assertj.core.api.Java6Assertions. *;' Http://joel-costigliola.github.io/assertj/assertj-core-quick-start. html – ejohansson

+0

Это ошибка компиляции. Это не произошло, когда вы проводили тест. – EJP

ответ

4

ejohansson правильно, это может быть не очень заметно, но org.assertj.core.api.Java6Assertions упоминаются в http://joel-costigliola.github.io/assertj/assertj-core.html, я постараюсь сделать его более ясным в будущем (https://github.com/joel-costigliola/assertj/issues/63).

Документация была обновлена, мы надеемся, это будет проще для андроид разработчиков, чтобы найти правильную точку утверждения входа: http://joel-costigliola.github.io/assertj/assertj-core.html#android

+0

О, это моя вина, я не читал [путеводитель по одной минуте] (http://joel-costigliola.github.io/assertj/assertj-core-quick-start.html), спасибо! –

0

С Android Studio, это, вероятно, хорошая идея exclude org.assertj.core.api.Assertions from auto-import, так что это не произойдет в в будущем, после того как вы забудете об этом:

  1. Удалить статический импорт на мгновение.
  2. Нажмите F2, чтобы перейти к проблемному утверждению.
  3. Hit Alt + Введите, чтобы показать список доступных действий .
  4. Выделить позицию для Assertions (org.assertj.core.api) и нажать .
  5. Выберите Исключить 'org.assertj.core.api.Assertions' из авто-импорта в списке, который только что появился.
Смежные вопросы