我有一个非常简单的junit测试类,它用Eclipse junit Launcher成功运行。
下面是JUnit的pom依赖项。
<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/xsd/maven-4.0.0.xsd">
...
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
</plugin>
</plugins>
</build>
</project>
但是,在运行maven build时,我会收到以下错误消息:
MyTest.java:[3,24] package org.junit does not exist
并且,在从junit依赖项中删除
之后,构建成功运行。
为什么它的测试范围失败,如何修复它?
我使用的是Java 8和Maven 3.3.9版本。
编辑-添加最小、完整和可验证的代码
由于我不能共享实际的代码,我创建了一个演示测试类,并在下面得到了相同的错误。
/MyProject/demo/src/test/java/com/MyTest.java:[3,24] package org.junit does not exist
/MyProject/demo/src/test/java/com/MyTest.java:[3,1] static import only from classes and interfaces
/MyProject/demo/src/test/java/com/MyTest.java:[5,17] package org.junit does not exist
MyTest类:
package com;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class MyTest {
@Test
public void demo() throws Exception {
int expected = 10;
int actual = 10;
assertEquals(expected, actual);
}
}
而且,它是一个多模块的项目。JUnit依赖项在common模块下,测试类在demo模块下。
demo模块中的pom.xml以包括常见的模块依赖项:
<dependencies>
<dependency>
<groupId>myproject</groupId>
<artifactId>common</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
然而,在将MyTest类复制到公共模块后,构建成功。因此,公共模块中的junit依赖项似乎没有导入到演示模块中。
在Maven中,并不是所有的可传递依赖项(依赖项的依赖项)都被添加到类路径中--这取决于作用域。如果可传递依赖项是test
或provided
作用域,则永远不会将它们添加到类路径中。这是有意义的,因为如果您将库添加到依赖项中,您就不希望依赖于它的测试库。
参见Maven对依赖机制#依赖范围的介绍,特别是小节底部的表格。
所以解决方案是将junit依赖项添加到您的目标模块中(而不是添加到您的公共模块中)。或者将其添加到父模块中(这有点奇怪,因为不是每个模块都需要这种依赖关系),这将有效地将其添加到所有子模块中。
首先请原谅我可能的无知,专业的做事方式对我来说很新鲜,如果有什么我没有提到的,请告诉我,我会尽力给你你需要的信息。。。 所以我试图用maven在Eclipse中构建我的webapp,我有一个测试套件 这很好,当我右键单击并以Junit test运行测试时,所有测试都通过了。 当我以Maven build的形式运行它,并以打包一系列测试为目标时,失败了??? 我的maven surefire插件配置
我们有一组UI测试每晚运行,有时一些测试由于网络故障而失败。为了避免假阴性测试结果,我使用了,它可以重新运行失败的测试多达3次。 当我从Eclispe右键单击套件运行测试时,它工作得非常好。xml—如果测试最初失败,但重试时通过,则第一个结果不算作失败。 但是,当作为Maven构建的一部分运行相同的测试时,如果任何测试失败,即使在重试时成功通过,构建也会失败。 例如,运行一个包含5个测试的套件,其
我正在TFS2015中运行一个构建,我得到了这个错误: 在org.apache.maven.lifecycle.internal.mojoexecutor.execute(mojoexecutor.java:217) 原因:org.apache.maven.plugin.MojoExecutionException:编译时出现致命错误 222 2018-07-25T11:22:37.0150577
问题内容: 在我们的项目中,我有几个JUnit测试,例如从目录中获取每个文件并对其进行测试。如果我在中实现了一种方法,那么它只会显示为可能失败或成功的一项测试。但是我对每个文件的结果都很感兴趣。如何编写一个/ 使得每个文件显示为单独的测试,例如在Eclipse的图形TestRunner中?(为每个文件编写显式测试方法不是一种选择。) 问题答案: 看看JUnit 4 中的 参数化测试 。 实际上,我
我正在jenkins上运行一组测试,我得到以下结果: 好的东西告诉我行: maven-surefire-插件: 2.16是这里的问题,所以这里是我的pom文件检查: 我已经检查了maven仓库中的插件,我看到的唯一区别是插件标签中有插件,而在网站中它是在依赖标签中。 这里可能有什么错误? 谢谢 注:抱歉纯文本,但我不知道如何给代码上色=/
问题内容: 我正在使用JUnit 4.4和Maven,并且有大量的长时间运行的集成测试。 关于并行化测试套件,有一些解决方案可以让我在单个测试类中并行运行每个测试方法。但是所有这些都要求我以一种或另一种方式更改测试。 我真的认为,在X线程中并行运行X个不同的测试类将是一种更干净的解决方案。我有成百上千的测试,所以我真的不在乎线程测试类。 问题答案: 使用Maven插件: