2017-01-22 19 views
5

Używam org.assertj:assertj-core:3.6.2 do przetestowania mojego projektu na Androida. Według offical ducoment, powinienem używać java 8 z assertj 3.x.plik klasy dla pliku java.nio.file.Path nie został znaleziony

Oto moja klasa testowa, próbuję sprawdzić, kiedy kliknięcie wykonane kod może rozpocząć oczekiwaną aktywność.

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

Ale kiedy uruchomić test, mam ten błąd:

: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. 

I wyszukiwane w Google i znaleźć to może spowodować przez niewłaściwej wersji Java (jestem naprawdę bardzo nie pewna).

Oto kilka informacji o moim java config:

$ 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 

A w strukturze projektu, ja Alše zestaw JDK do jdk1.8.0_112 enter image description here

Jeśli było to spowodowane przez wersję Java, co powinienem zrobić? Jeśli nie, to co mam zrobić?

+7

W systemie Android używaj tego statycznego importu: 'import static org.assertj.core.api.Java6Assertions. *;' Http://joel-costigliola.github.io/assertj/assertj-core-quick-start. html – ejohansson

+0

To jest błąd kompilacji. Nie zdarzyło się to, gdy przeprowadzałeś test. – EJP

Odpowiedz

4

ejohansson ma rację, może nie być super widoczny, ale org.assertj.core.api.Java6Assertions jest wymienione w http://joel-costigliola.github.io/assertj/assertj-core.html, postaram się uczynić go jaśniejszym w przyszłości (https://github.com/joel-costigliola/assertj/issues/63).

Dokumentacja została zaktualizowana, mam nadzieję, że to będzie łatwiejsze dla android deweloperzy, aby znaleźć właściwy punkt wejścia twierdzenia: http://joel-costigliola.github.io/assertj/assertj-core.html#android

+0

Oh, to moja wina, nie przeczytałem [poradnika początkowej minuty] (http://joel-costigliola.github.io/assertj/assertj-core-quick-start.html), dziękuję! –

0

z Android Studio, to chyba dobry pomysł, aby exclude org.assertj.core.api.Assertions from auto-import, więc to nie zdarza się w przyszłość, po tym, jak zapomnisz o tym:

  1. Usuń na chwilę import statyczny.
  2. Hit F2, aby przejść do problemu.
  3. Hit Alt + Wprowadź, aby wyświetlić listę dostępnych działań zamiaru .
  4. Podświetlić pozycję dla Assertions (org.assertj.core.api) i nacisnąć → →.
  5. Wybierz Wyklucz "org.assertj.core.api.Asersesions" z automatycznego importu na wyświetlonej liście.
Powiązane problemy