【问题标题】:Unit testing Android with Maven使用 Maven 对 Android 进行单元测试
【发布时间】:2011-03-08 11:15:35
【问题描述】:

我有一个关于使用 Maven 构建的 android 项目的问题, 我们让它运行我们的活动测试,但现在我们需要它来运行单元测试。 单元测试与活动测试在同一个项目中,如何在我们的 pom.xml 文件中设置它?

这是父 Pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>andersen.project</groupId>
  <artifactId>Hello-parent</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>
  <name>Hello - Parent</name>

  <modules>
    <module>HelloWorld</module>
    <module>HelloWorldTest</module>
  </modules>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>2.2.1</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android-test</artifactId>
        <version>2.2.1</version>
        <scope>provided</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
  <sourceDirectory>src</sourceDirectory>
  <testSourceDirectory>test</testSourceDirectory>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>com.jayway.maven.plugins.android.generation2</groupId>
          <artifactId>maven-android-plugin</artifactId>
          <version>2.8.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

这是应用程序 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>andersen.project</groupId>
    <artifactId>Hello-parent</artifactId>
    <version>1.0</version>
  </parent>

  <groupId>andersen.project</groupId>
  <artifactId>helloworld</artifactId>
  <version>1.0</version>
  <packaging>apk</packaging>
  <name>HelloWorld - Application</name>

  <dependencies>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android</artifactId>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>com.jayway.maven.plugins.android.generation2</groupId>
        <artifactId>maven-android-plugin</artifactId>
        <configuration>
          <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
          <assetsDirectory>${project.basedir}/assets</assetsDirectory>
          <resourceDirectory>${project.basedir}/res</resourceDirectory>
          <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
          <sdk>
            <platform>4</platform>
          </sdk>
          <deleteConflictingFiles>true</deleteConflictingFiles>
          <undeployBeforeDeploy>true</undeployBeforeDeploy>
        </configuration>
        <extensions>true</extensions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

这是测试 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>andersen.project</groupId>
    <artifactId>Hello-parent</artifactId>
    <version>1.0</version>
  </parent>

  <groupId>andersen.project</groupId>
  <artifactId>helloworldtest</artifactId>
  <version>1.0</version>
  <packaging>apk</packaging>
  <name>HalloWorld - Integration tests</name>

  <dependencies>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android-test</artifactId>
    </dependency>
    <dependency>
      <groupId>andersen.project</groupId>
      <artifactId>helloworld</artifactId>
      <type>apk</type>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>andersen.project</groupId>
      <artifactId>helloworld</artifactId>
      <type>jar</type>
      <version>1.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>com.jayway.maven.plugins.android.generation2</groupId>
        <artifactId>maven-android-plugin</artifactId>
        <configuration>
          <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
          <assetsDirectory>${project.basedir}/assets</assetsDirectory>
          <resourceDirectory>${project.basedir}/res</resourceDirectory>
          <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
          <sdk>
            <platform>4</platform>
          </sdk>
          <deleteConflictingFiles>true</deleteConflictingFiles>
          <undeployBeforeDeploy>true</undeployBeforeDeploy>
        </configuration>
        <extensions>true</extensions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

我应该在父 pom.xml 中添加以下文本吗?:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.1</version>
  <scope>test</scope>
</dependency>

并将其添加到其他 pom 中?

当我运行 maven 时,输出是:

Junit.framework 不存在

【问题讨论】:

  • 当然,如果您使用的是 JUnit,则必须添加依赖项。
  • 是的,但它仍然失败。 Junit.framework 不存在。

标签: android unit-testing maven


【解决方案1】:

我遇到了同样的问题。这是由父 pom 中的错误配置引起的。您必须删除 dependencyManagement 部分中的范围标记。

像这样:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android</artifactId>
      <version>2.2.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android-test</artifactId>
      <version>2.2.1</version>
    </dependency>
  </dependencies>
</dependencyManagement>

【讨论】:

【解决方案2】:

Surefire plugin 添加到测试pom.xml。 Surefire 运行单元测试。

【讨论】:

  • 我已将依赖项添加到父 pom.xml 文件和测试 pom.xml 文件中。但还是失败了:junit.framework 不存在
  • @Casper:不要忘记在模块中添加单元测试:maven.apache.org/plugins/maven-surefire-plugin/examples/…
  • 请发布整个错误消息。谁说的?万无一失? Java 编译器?
  • consol 在我的父文件夹中执行“mvn clean install”后编写它。它成功构建父级和应用程序,但未通过 junit.framework 测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
相关资源
最近更新 更多