Integrating roboelectric with android studio using gradle always gives org.junit package no error exists

I am trying to integrate roboelectric into my new project. I used the following links to understand and implement roboelectric

http://pivotallabs.com/setting-up-robolectric-in-android-studio-1-1-on-os-x/

http://nenick-android.blogspot.in/2015/02/android-studio-110-beta-4-and.html

http://raptordigital.blogspot.in/2014/02/test-driven-development-with.html

But I get the following error when running my test class

Error:Gradle: Execution failed for task ':app:compileDebugJava'. > Compilation failed; see the compiler error output for details. E:\junitTest\android-studio-robolectric-example-master\JunitTestApp\app\src\test\java\com\inapp\junittestapp\SampleTest.java Error:(7, 17) Gradle: error: package org.junit does not exist Error:(8, 24) Gradle: error: package org.junit.runner does not exist Error:(9, 23) Gradle: error: package org.robolectric does not exist Error:(10, 34) Gradle: error: package org.robolectric.annotation does not exist Error:(11, 31) Gradle: error: package org.robolectric.shadows does not exist Error:(13, 27) Gradle: error: package org.hamcrest does not exist Error:(13, 1) Gradle: error: static import only from classes and interfaces Error:(14, 27) Gradle: error: package org.hamcrest does not exist Error:(14, 1) Gradle: error: static import only from classes and interfaces Error:(15, 24) Gradle: error: package org.junit does not exist Error:(15, 1) Gradle: error: static import only from classes and interfaces Error:(16, 30) Gradle: error: package org.robolectric does not exist Error:(16, 1) Gradle: error: static import only from classes and interfaces Error:(17, 30) Gradle: error: package org.robolectric does not exist Error:(17, 1) Gradle: error: static import only from classes and interfaces Error:(18, 30) Gradle: error: package org.robolectric does not exist Error:(18, 1) Gradle: error: static import only from classes and interfaces Error:(25, 2) Gradle: error: cannot find symbol class RunWith Error:(26, 2) Gradle: error: cannot find symbol class Config Error:(30, 6) Gradle: error: cannot find symbol class Test Error:(32, 38) Gradle: error: cannot find symbol method setupActivity(Class<MainActivity>) Error:(36, 9) Gradle: error: cannot find symbol method clickOn(Button) Error:(38, 41) Gradle: error: cannot find symbol variable ShadowAlertDialog Error:(39, 42) Gradle: error: cannot find symbol method notNullValue() Error:(41, 9) Gradle: error: cannot find symbol class ShadowAlertDialog Error:(41, 47) Gradle: error: cannot find symbol method shadowOf(AlertDialog) Error:(42, 61) Gradle: error: cannot find symbol method is(String) 

Added below code of my test class

 import android.app.AlertDialog; import android.widget.Button; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowAlertDialog; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; import static org.robolectric.Robolectric.clickOn; import static org.robolectric.Robolectric.setupActivity; import static org.robolectric.RobolectricBase.shadowOf; @RunWith(RobolectricTestRunner.class) @Config(manifest = "app/src/main/AndroidManifest.xml", emulateSdk = 18) public class SampleTest { @Test public void buttonTapDisplaysAnAlertDialog() { MainActivity helloActivity = setupActivity(MainActivity.class); Button button = (Button) helloActivity.findViewById(R.id.button); clickOn(button); AlertDialog latestAlertDialog = ShadowAlertDialog.getLatestAlertDialog(); assertThat(latestAlertDialog, is(notNullValue())); ShadowAlertDialog shadowAlertDialog = shadowOf(latestAlertDialog); assertThat(shadowAlertDialog.getTitle().toString(), is("Hi")); } } 

and my gradle application is

  apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.example.junittestapp" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { java.srcDirs = ['src/main/java', 'src/test/java/'] } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:support-v4:22.1.1' testCompile 'junit:junit:4.12' testCompile 'org.robolectric:robolectric:2.4' } 

I also found a mistake on this blog

https://discuss.gradle.org/t/why-cant-my-simplest-one-line-build-gradle-compile-tests-with-junit-jar/1868

I think I missed something. Any help would be appreciated.

+6
source share
4 answers

Your problem is that you have one sourceSet declared as the main one, which contains the code for the application and for the test. This is why Gradle's task: app: compileDebugJava 'fails because at that moment it does not have junit.jar (it is injected into testCompile - time). Declare two different sources, and everything should work.

 sourceSets { main { java.srcDirs = ['src/main/java'] } robolectric { java.srcDir file('src/test/java/') resources.srcDir file('src/test/resources') } } 
+13
source

Same error here. Solution for my case: remove 'src/test/java' from main.java.srcDirs .

Before

 main.java.srcDirs = ['src/main/java', 'src/test/java'] 

After :

 main.java.srcDirs = ['src/main/java'] 

Tested in order with Android Studio 2.0 Preview 4. And in fact, with the latest version of Android Studio you do not need to set the robolectric property inside sourceSets (as mentioned in @falvick).

+4
source

If you came here trying to run your unit tests on Android, you can fix this problem by specifying the location of the test files in the source sets like this:

 sourceSets { main { java.srcDirs = ['src/main/java'] } test { java.srcDirs = ['src/test/java'] } } 

You can change to use wherever the source directory is located. Note that this happens in build.gradle (application level)

+3
source

Had the same problem, in my case I put the test class in the wrong directory.

SIC \ androidTest \ Java [package] \

but not

SIC \ test \ Java [package] \

I assume you can configure it to work with other directories, but unit test testing in test and UI / system tests in androidTest looks fine

+2
source

Source: https://habr.com/ru/post/987925/


All Articles