【问题标题】:Android Studio with JUnit testing带有 JUnit 测试的 Android Studio
【发布时间】: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 依赖之上。

【问题讨论】:

标签: java android junit intellij-idea android-studio


【解决方案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) ...

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,我将问题追溯到我的 gradle 文件。我需要以下内容:

    aidl.srcDirs = ['src']
    

    【讨论】:

      【解决方案3】:

      测试类的位置已在 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" />
      

      【讨论】:

        【解决方案4】:

        如果您仍然对此感到困惑,我会设置一个示例项目,它独立使用 Espresso 和 Robotium 测试!

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-28
          • 1970-01-01
          • 2015-07-21
          • 2014-07-03
          • 1970-01-01
          • 2020-10-23
          • 2015-04-10
          相关资源
          最近更新 更多