2014-02-11 68 views
3

UPDATEAndroid Studio中使用JUnit測試

按照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 { 
    compileSdkVersion 19 
    buildToolsVersion '19.0.1' 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 19 
     testPackageName "com.example.app.test" 
     testInstrumentationRunner "android.test.InstrumentationTestRunner" 
     testFunctionalTest true 
    } 
} 

我還使用舊的結構嘗試,並得到錯誤「主要從清單應用程序/ 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() { 

    } 
} 

我也嘗試延長AndroidTestC ASE和收到此錯誤與兩個父類:

!!! 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依賴關係之上。

+1

我會推薦閱讀http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing的搖籃下指導測試,然後修改您的問題與任何你仍然有問題。 –

+0

謝謝你的資源!在閱讀build.gradle文件並搞亂之後,仍然存在一些bug。我也更新了這個問題。如果還有其他資源需要閱讀,請告訴我。 – iamreptar

+0

http://tools.android。COM /科技的文檔/單元測試支持 –

回答

1

此問題已被固定在測試文件移動到同一個軟件包所測試的(包私人)類是:

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) ... 
0

我也有類似的問題,我跟蹤這個問題到我的gradle文件。我需要以下內容:

aidl.srcDirs = ['src'] 
0

測試類的位置已在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" />