我正在使用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什么?使用哪个目录结构?
我正在使用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) 我已经创建了一个新的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运行配置,但这没有帮助.
我从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)
我尝试了几十种解决方案,我在谷歌中发现了这个问题,但没有一个有效.
我正在使用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),我最终得到的结果是:
从控制台启动可调试的gradle配置
gradlew -DtestDebug.debug=true app:clean app:testDebug
这将停止gradle构建并在5005等待监听器
在Android Studio中创建"远程"启动配置,该配置将附加在端口5005上
在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