相关疑难解决方法(0)

如何使用Android Studio运行单元测试

我正在使用Jake的Android单元测试插件进行gradle:https://github.com/JakeWharton/gradle-android-test-plugin

我的build.gradle看起来像这样:

dependencies {
// analytics
compile('com.crittercism:crittercism-android:3.0.11')

// retrofit
compile('com.squareup.retrofit:retrofit:1.2.2')
compile('com.squareup.okhttp:okhttp:1.2.1')

// dagger
compile('com.squareup.dagger:dagger:1.1.0')
compile('com.squareup.dagger:dagger-compiler:1.1.0')

// compatibility
compile('android.compatibility:android-support:v4-r13')
compile('com.actionbarsherlock:actionbarsherlock:4.4.0@aar')

// Picasso
compile('com.squareup.picasso:picasso:2.1.1')

// Otto
compile('com.squareup:otto:1.3.4')

// Tests
testCompile 'junit:junit:4.10'
testCompile 'org.robolectric:robolectric:2.2'
testCompile 'org.powermock:powermock-api-mockito:1.5.1'
testCompile 'org.easytesting:fest-assert-core:2.0M10'
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法运行所有或特定的单元测试表单Android Studio.我收到错误:

Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:171)
 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113)
Caused by: java.lang.ClassNotFoundException: junit.textui.ResultPrinter
 at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
 ... 3 more
Run Code Online (Sandbox Code Playgroud)

这是正确的,因为运行命令行不包括我的JUnit依赖项:

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/Android Studio.app/bin" …
Run Code Online (Sandbox Code Playgroud)

junit android gradle robolectric android-studio

28
推荐指数
2
解决办法
6万
查看次数

Gradle + Robolectric:我在哪里放置文件org.robolectric.Config.properties?

我正在尝试使用Robolectric设置测试以单击此存储库中的菜单按钮.基本的Robolectric测试将运行,但我无法使用资源运行任何项目特定的测试,因为它说它无法找到我的AndroidManifest.xml.运行后../gradlew clean check,这是Robolectric html文件的标准输出:

WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. To remove this warning, annotate your test class with @Config(manifest=Config.NONE).

我发现这些说明表明我应该创建一个org.robolectric.Config.properties文件,但我不知道该把它放到哪里.我几乎到处都试过,尽管移动了文件,但错误信息中的路径始终与上面相同(./AndroidManifest.xml).这让我觉得构建过程从未获取文件中的设置org.robolectric.Config.properties.

我也尝试了@Config(manifest ="")指令,但这给了我一个cannot find symbol错误.如果我将AndroidManifest.xml移动到我的项目目录中,那么我得到一个错误,它无法找到路径./res/values,我也无法解决.有任何想法吗?

更新1

谢谢欧根,我现在用@RunWith(RobolectricGradleTestRunner.class)而不是@RunWith(RobolectricTestRunner).

现在我得到了一个不同的错误,仍然发生在我的BasicTest.java的同一行

KeywordList keywordList = Robolectric.buildActivity(KeywordList.class).create().get();
Run Code Online (Sandbox Code Playgroud)

以下是Robolectric测试报告中标准错误,标准输出和"失败测试"选项卡的结果:

注意:我也尝试用最新的Robolectric更新,robolectric-2.2-SNAPSHOT.jar构建的jar替换,但仍然出错.

标准错误

WARNING: no system properties value for ro.build.date.utc

标准输出

DEBUG: Loading resources for net.frontlinesms.android from ~/workspace-studio/frontlinesms-for-android/FrontlineSMS/build/res/all/debug...
DEBUG: Loading …
Run Code Online (Sandbox Code Playgroud)

testing android unit-testing gradle robolectric

21
推荐指数
2
解决办法
7252
查看次数

Android Studio找不到TestCase类

我编写了一个简单的测试用例类,并将其放在Android Studio的默认测试目录中:"src/androidTest".我创建了一个Android Tests构建配置,用于查找模块中的所有测试.当我运行构建配置时,我的测试没有执行,我在logcat中收到以下消息:W/TestGrouping? Invalid Package: '' could not be found or has no tests.如果我指定测试包甚至特定的测试类,我会得到类似的类未找到的消息.

我的测试类如下:

public class FirstTest extends InstrumentationTestCase {

public void testSample() {
        final int expected = 1;
        final int reality = 5;
        assertEquals(expected, reality);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的build.gradle文件如下所示:

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' …
Run Code Online (Sandbox Code Playgroud)

android automated-tests android-studio

11
推荐指数
4
解决办法
1万
查看次数