TestCase class not found by Android Studio

妖精的绣舞 提交于 2019-12-29 06:46:13

问题


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:

  1. 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.
  2. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!