问题
I have written a simple test case class and placed it in the default test directory for Android Studio: "src/androidTest". I've created an Android Tests build configuration that looks for all Tests in the module. When I run the build configuration, my test does not execute and I get the following message in logcat: W/TestGrouping﹕ Invalid Package: '' could not be found or has no tests. If I specify the test package or even the specific test class, I get similar class not found messages.
My test class is as follows:
public class FirstTest extends InstrumentationTestCase {
public void testSample() {
final int expected = 1;
final int reality = 5;
assertEquals(expected, reality);
}
}
My build.gradle file looks like this:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:gridlayout-v7:19.0.1'
compile 'com.android.support:support-v4:19.0.1'
compile 'com.android.support:appcompat-v7:19.0.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
I'm running version 0.9 of the android gradle plugin. My top level build.gradle (a peer to the app directory) looks like this.
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
allprojects {
repositories {
mavenCentral()
}
}
My project directory structure is as follows:
app
src
androidTest
java
main
java
res
回答1:
The package structure under the androidTest/java directory needs to exactly parallel the structure under the main/java directory.
My problem above was that the package structure under main was com.mydomain.myapp.subpackage and the directory structure under androidTest was com.mydomain.myapp.subpackage.somethingelse.
Once the package structures matched, the tests were discovered and executed flawlessly.
回答2:
You need to check "run" configuration.
If you are going to run tests from androidTest folder, you should choose configuration under Android Instrumented Test, and not the junit.
Run(Top tool window) / Edit configurations...
回答3:
You needn't really to rebuild structure of src directories to create appropriate tests.
The tested and the testing class should be in the same package.
But as for folders, they should be separated. So, for tests and normal sources we use different roots.
The problem is, how to set these roots. In the AS 1.5 (maybe earlier versions can do it, too), it can be done easily:
- Make practically any structure of directories. Somewhere in it there is the root dir of tested sources. Right click it and
Mark Directory As...Sources Root. - Make another arbitrary structure of directories for tests. Somewhere in it there is the root dir of test sources. Right click it and
Mark Directory As...Test Sources Root.
Under these roots the path to a test class must be the same as the path to the tested class from its root, for dir names along these paths define the packages and they should be the same. But you needn't worry about the structures above the roots.
Using this method you can add tests to any existing structure of sources. If you are creating the structure yourself, make it rather traditional.
Edit. Notice, that folders structure for modules of Java 9 is something ABSOLUTELY different.
回答4:
Please post your entire build.gradle file.
What version of 'com.android.tools.build:gradle' are you using?
In 0.8, the default test path is "instrumentTest/java/...'.
In 0.9, the default test path changed to "androidTest/java/...".
To use androidTest, you should have:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
回答5:
In addition to all of that written before my note (so check those please before this suggestion of mine), I've sometimes solved moving the test file outside the custom directory (as example, I've created dir like db_test or similar under /test or androidTest) to the root of test or androidTest, drag&dropping it outside dir in AndroidStudio explorer and waiting for the refactor android studio dialog for moving confirmation.
After running it successfully, I've put again in the original directory, run again and it works.
In another case I've solved renaming the custom dir.
In another, because the test was in the root, I've create custom dir, move it inside, and then ran successfully.
These worked for me, hope it could save time for someone else.
来源:https://stackoverflow.com/questions/22241399/testcase-class-not-found-by-android-studio