【发布时间】:2014-03-09 22:27:54
【问题描述】:
更新
根据new build system,层次结构应如下所示:
MyProject/
src/
androidTest/
java/
com.example.app.test/
... (source code for tests) ...
main/
AndroidManifest.xml
java/
com.example.app/
... (source code for main application) ...
res/
... (resources for main application) ...
但是,我无权访问 com.example.app 包中的包私有类。 build.gradle android 对象如下所示:
android {
compileSdkVersion 19
buildToolsVersion '19.0.1'
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
testPackageName "com.example.app.test"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
testFunctionalTest true
}
}
我也尝试过使用旧结构,但收到错误“App/AndroidManifest.xml 中缺少主清单”:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
}
我需要使用旧结构吗?将测试置于 com.example.app 包范围内的新结构缺少什么?
更新 2:
我在 instrumentTest 文件夹的 AndroidManifest.xml 文件中看到一个错误:元素中的“无法解析符号 'com.example.app'”
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.app"/>
这是测试类:
package com.example.app.test;
import junit.framework.TestCase;
public class SimpleTest extends TestCase {
public SimpleTest(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
assertTrue(true);
}
public void alwaysPasses() {
}
}
我也尝试过扩展 AndroidTestCase 并在两个父类中都收到此错误:
!!! 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)
at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:168)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
我已尝试使用此solution 解决错误,但项目结构中没有 Android 1.6 平台 |模块 |依赖项部分。所以,基本上,我不知道如何将 junit 依赖移到类路径中的 Android 依赖之上。
【问题讨论】:
-
我建议阅读 tools.android.com/tech-docs/new-build-system/… 作为在 Gradle 下测试的指南,然后用您仍然遇到的任何问题来修改您的问题。
-
感谢您提供的资源!在阅读并弄乱了 build.gradle 文件后,仍然存在一些错误。我也更新了这个问题。如果还有其他我应该阅读的资源,请告诉我。
标签: java android junit intellij-idea android-studio