试过这篇文章的建议,但我仍然得到错误:
!!! 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)
Process finished with exit code -3
Run Code Online (Sandbox Code Playgroud)
不知道该怎么做.试图重新组织Junit依赖的顺序.没有运气,其他人得到这个问题?
Android Studio V. 1.2.1.1
我的Android工作室项目有一个依赖于android框架的app模块,我创建了一个名为domain的新模块,它只包含纯java类和一些测试类.
在这个模块的build.gradle文件中,我添加了junit和mockito库用于测试目的,如下所示:
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
dependencies {
testCompile 'junit:junit:4.11'
testCompile 'org.mockito:mockito-core:1.9.5'
compile project(':common')
compile project(':model')
//test dependencies
}
Run Code Online (Sandbox Code Playgroud)
但是!!! JUnit version 3.8 or later expected每当我尝试执行测试类时,Android Studio都会给我错误消息.
此问题的所有建议解决方案是打开项目结构| 模块| 依赖关系,并将junit-4.7.jar向上移动,以便它在类路径中的Android 1.6 Platform之前出现.
事实上,我试图实现这个解决方案,但问题仍然存在.
有关如何解决此问题的任何想法?
我试图在JUnit的3.7版本上运行一个简单的JUnit测试用例(我无法将其升级到最新版本)
运行IntelliJ,当我尝试运行JUnit测试用例时,我收到以下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:108)
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:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 3 more
Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)
我的类路径上有IntelliJ版本10.0.2,JUnit 3.7和IntelliJ插件,它声明它支持3.x和4.x
我可以看到IntelliJ执行以下操作(添加了中断以使其更具可读性)
"C:\Program Files\Java\jdk1.6.0_20\bin\java" -Didea.launcher.port=7532
"-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 10.0\bin"
-Dfile.encoding=windows-1252
-classpath "C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 10.0\lib\idea_rt.jar;
C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 10.0\plugins\junit\lib\junit-rt.jar;
C:\Program Files\Java\jdk1.6.0_20\jre\lib\alt-rt.jar;
C:\Program Files\Java\jdk1.6.0_20\jre\lib\charsets.jar;
C:\Program Files\Java\jdk1.6.0_20\jre\lib\deploy.jar;
C:\Program Files\Java\jdk1.6.0_20\jre\lib\javaws.jar;
C:\Program Files\Java\jdk1.6.0_20\jre\lib\jce.jar; …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Android Studio中使用Robolectric进行单元测试.我快到了 - 我明白了:
!!! 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)
at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:185)
...
Run Code Online (Sandbox Code Playgroud)
我也看到了类路径中所有必需的依赖项.要修复此错误,我需要在android sdk依赖项之前放置junit4依赖项.不幸的是我没有在Project Structure部分看到模块,我不知道如何编辑iml文件来存档它.
这是我的项目结构的截图:

我的gradle文件:
sourceSets {
testLocal {
java.srcDir file('src/test/java')
resources.srcDir file('src/test/resources')
}
}
dependencies {
// compatibility
compile 'android.compatibility:android-support:v4-r13'
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
testLocalCompile 'junit:junit:4.11'
testLocalCompile 'org.robolectric:robolectric:2.2'
testLocalCompile 'org.easytesting:fest-assert-core:2.0M10'
}
android {
buildToolsVersion "17"
compileSdkVersion 18
productFlavors {
testLocal{
}
}
}
Run Code Online (Sandbox Code Playgroud)
我选择了AS中的testLocal风味.
我在Android Studio项目中有一些简单的旧Java类和简单的JUnit测试.他们目前住在我的Android模块中.如果我将它们作为Android测试运行它们会很好地通过,但它们确实很慢,因为它需要启动或连接到模拟器.
如果我尝试运行一个作为JUnit测试,我遇到了!!! JUnit version 3.8 or later expectedJUnit版本问题.此答案解释了如何解决该问题.不幸的是,我然后点击了java.lang.NoClassDefFoundError: junit/textui/ResultPrinter,我无法弄清楚如何解决.
然后我尝试将我的JUnit测试移动到依赖于Android模块的单独Java模块中.一切都很好.我添加了一个新配置来启动JUnit测试(:MyJUnitTests:test),但测试失败了package com.myproject.util does not exist.看起来类似路径可能不包括依赖Android模块中的类.
有人知道如何解决这个类路径问题吗?我看了很多相关的答案,但似乎没有一个对我有用.或者尝试将JUnit测试保存在自己的模块中是一个坏主意?
我可以让JUnit测试快速运行并传递,如果我将我的普通Java类及其JUnit测试移动到一个完全独立的模块(例如此处),并反转依赖性,以便Android模块依赖于Java模块.这是首选解决方案吗?