[英]Android Studio with JUnit testing
UPDATE
根據新的構建系統 ,層次結構應如下所示:
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)
我已嘗試使用此解決方案解決錯誤,但項目結構中沒有Android 1.6平台 模塊| 依賴性部分。 所以,基本上,我不知道如何在類路徑中將junit依賴項移到Android依賴項之上。
通過將測試文件移動到被測試的(包 - 私有)類所在的同一個包中來解決此問題:
MyProject/
src/
androidTest/
java/
com.example.app/
... (source code for tests) ...
main/
AndroidManifest.xml
java/
com.example.app/
... (source code for main application) ...
res/
... (resources for main application) ...
我有一個類似的問題,我將問題跟蹤到我的gradle文件。 我需要以下內容:
aidl.srcDirs = ['src']
已在Android Studio項目的內部.iml文件中為Gradle聲明測試類的位置。 例如,從0.8.3開始,您可以看到:
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/groovy" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
如果您仍然堅持這一點,我設置了一個獨立使用Espresso和Robotium測試的示例項目!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.