簡體   English   中英

帶有JUnit測試的Android Studio

[英]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測試的示例項目!

https://github.com/hitherejoe/Android-Boilerplate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM