相关疑难解决方法(0)

使用基于Gradle的配置时,在Android Studio(IntelliJ)上运行简单的JUnit测试

我正在使用Android Studio/IntelliJ构建现有Android项目,并希望添加一些简单的JUnit单元测试.添加此类测试的正确文件夹是什么?

所述机器人Gradle插件限定具有目录结构src/main/java的主要源代码和src/instrumentTest/java用于Android测试.

试图在instrumentTest中添加我的JUnit测试对我来说不起作用.我可以将它作为Android测试运行(这就是该目录所针对的)但这不是我想要的 - 我只想运行一个简单的JUnit测试.我尝试为这个类创建一个JUnit运行配置但是也没有用 - 我想是因为我使用的是一个被标记为AndroidTest而不是Source的目录.

如果我在项目结构中创建一个新的源文件夹并将其标记为此类,则下次IntelliJ从gradle构建文件刷新项目配置时将会擦除此文件夹.

在基于gradle的android项目中配置JUnit测试的更合适的方法是IntelliJ什么?使用哪个目录结构?

junit android intellij-idea gradle android-studio

78
推荐指数
3
解决办法
6万
查看次数

如何使用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万
查看次数

Robolectric无法找到资源或清单文件

我已经创建了一个新的TestProject并在我的testMethod中添加了以下行:

Robolectric.getShadowApplication().getString(R.string.mystring);
Run Code Online (Sandbox Code Playgroud)

我的测试失败了

android.content.res.Resources$NotFoundException: unknown resource 2131558482
Run Code Online (Sandbox Code Playgroud)

控制台显示以下警告:

WARNING: No manifest file found at .\..\..\MyProject\AndroidManifest.xml.Falling back to the Android OS resources only.
To remove this warning, annotate your test class with @Config(manifest=Config.NONE).
WARNING: no system properties value for ro.build.date.utc
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml是否需要获取字符串资源?我尝试通过org.robolectric.Config.properties@Config添加Manifest,但警告仍然发生,我无法获取字符串资源.我确保清单的相对路径是正确的.我也试过更改JUnit运行配置,但这没有帮助.

android android-manifest robolectric

16
推荐指数
3
解决办法
1万
查看次数

Android Studio + Robolectric + Gradle Class未找到例外

我从https://github.com/robolectric/deckard-gradle下载了Robolectric deckard-gradle项目并导入到Android Studio.

在我第一次跑步时,我得到了

!!! JUnit version 3.8 or later expected:
    java.lang.RuntimeException: Stub!
      at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
      at junit.textui.TestRunner.<init>(TestRunner.java:54)
      at junit.textui.TestRunner.<init>(TestRunner.java:48)
      at junit.textui.TestRunner.<init>(TestRunner.java:41)
Run Code Online (Sandbox Code Playgroud)

错误,我从.iml修复此问题.

然后我得到了:

Class Not Found "my test class"
Run Code Online (Sandbox Code Playgroud)

我尝试了几十种解决方案,我在谷歌中发现了这个问题,但没有一个有效.

tdd android robolectric robolectric-gradle-plugin

10
推荐指数
1
解决办法
4793
查看次数

使用IntelliJ/AndroidStudio调试基于gradle的单元测试

我正在使用robolectric gradle插件为Android编写单元测试.除了能够使用Android Studio正确调试我的测试之外,到目前为止一切正常.

我做了一些调查(http://forums.gradle.org/gradle/topics/how_do_you_attach_a_debugger_to_gradle_so_that_i_can_debug_it_running_a_task),我最终得到的结果是:

  1. 从控制台启动可调试的gradle配置 gradlew -DtestDebug.debug=true app:clean app:testDebug 这将停止gradle构建并在5005等待监听器

  2. 在Android Studio中创建"远程"启动配置,该配置将附加在端口5005上

  3. 在Debug-mode中从Android Studio启动该配置

每次都要完成步骤1 + 3,我想调试我的测试.这很烦人.我想有办法,我可以直接从intelliJ启动gradle构建,它会自动附加调试器.我怎样才能做到这一点?

信息:(当然,理想的解决方案是我可以通过IntelliJ的JUnit配置直接启动单元测试,因为这样可以给我IDE支持,整齐地显示失败和通过测试等等.但是我遇到了问题. JUnit构建时没有找到Manifest文件等,所以我暂时放弃了它.)

**Gradle构建文件**

apply plugin: 'com.android.application'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.robolectric:robolectric-gradle-plugin:0.12.+'
    }
}

apply plugin: 'robolectric'

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    packagingOptions {
        exclude 'LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE'
    }

    defaultConfig {
        applicationId "test.fs.test"
        minSdkVersion 14
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false …
Run Code Online (Sandbox Code Playgroud)

debugging android intellij-idea gradle android-gradle-plugin

6
推荐指数
0
解决办法
2516
查看次数