Android Studio与JUnit测试

3

更新

根据新的构建系统,目录结构应该如下:

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中缺少主清单(Main Manifest)”:

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)

我尝试使用这个解决方法来解决错误,但在Project Structure | Modules | Dependencies 部分中没有Android 1.6平台。所以,基本上,我不知道如何将junit依赖项移动到classpath中的Android依赖项之上。

1
我建议阅读http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing作为Gradle下测试的指南,然后根据你仍然遇到的问题修改你的问题。 - Scott Barta
感谢您提供的资源!在阅读和处理 build.gradle 文件后,仍然存在一些错误。我已经更新了问题。如果有其他需要阅读的资源,请告诉我。 - iamreptar
http://tools.android.com/tech-docs/unit-testing-support - Gelldur
4个回答

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" />

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接