Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

class file for java.nio.file.Path not found

I'm using org.assertj:assertj-core:3.6.2 to test my android project. According offical ducoment, I should use java 8 with assertj 3.x.

Here is my test class, I'm trying to verify when the click performed the code can start expected activity.

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

But when I run test, I got this error:

: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 searched on google and found it might cause by the wrong version of java( I'm really really not sure about that).

Here is some information about my 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

And in project structure, I alse set JDK to jdk1.8.0_112 enter image description here

If it was caused by the version of java, what should I do? If not, then what should I do ?

like image 782
gn cavalry Avatar asked Jan 22 '17 05:01

gn cavalry


People also ask

What is Java NIO file paths?

Advertisements. As name suggests Path is the particular location of an entity such as file or a directory in a file system so that one can search and access it at that particular location.

What is import Java NIO file files?

Advertisements. Java NIO package provide one more utility API named as Files which is basically used for manipulating files and directories using its static methods which mostly works on Path object.

Which methods are found in the NIO 2 files class?

Java NIO Files class contains static methods that is used for manipulating files and directories and those methods mostly works on Path object.


1 Answers

ejohansson is right, it might not be super visible but org.assertj.core.api.Java6Assertions is mentioned in http://joel-costigliola.github.io/assertj/assertj-core.html, I'll try to make it clearer in the future (https://github.com/joel-costigliola/assertj/issues/63).

Documentation has been updated, hopefully it will be easier for android developers to find the correct assertions entry point: http://joel-costigliola.github.io/assertj/assertj-core.html#android

like image 118
Joel Costigliola Avatar answered Sep 28 '22 14:09

Joel Costigliola