我怎样才能确保某些测试是在Maven构建中执行的,而不是被默默忽略?
我最近被迫切换到Groovy 3。因此,我也更新了我的斯波克版本。不幸的是,我忽略了Spock2需要JUnit5的事实。我只有JUnit 4和Spock测试,因此Maven Surefire插件使用JUnit 4提供程序来执行测试。所有斯波克试验均被忽略。我只是碰巧注意到了这一点。
我正在寻找一种方法来检查某些(或任何)以*Spec结尾的测试是否在执行的测试中。我看了看Maven Surefire和Maven执行者插件,但找不到任何适合我需要的东西。如果我完全跳过测试执行,则此检查不应失败。
编辑:这是Spock示例项目的缩短版本,因为kriegaex建议发布一些pom.xml文件。然而,这个问题适用于所有Java项目。对我来说,在项目本身的构建过程中的解决方案将优于配置CI/CD作业,因为在将项目移动/迁移到另一个CI管道时,这很容易被遗忘。
<?xml version="1.0"?>
<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>org.spockframework</groupId>
<artifactId>spock-example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Spock Framework - Example Project</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<groovy.version>3.0.7</groovy.version>
</properties>
<build>
<plugins>
<!-- Mandatory plugins for using Spock -->
<plugin>
<!-- The gmavenplus plugin is used to compile Groovy code. To learn more about this plugin,
visit https://github.com/groovy/GMavenPlus/wiki -->
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.12.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compileTests</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Optional plugins for using Spock -->
<!-- Only required if names of spec classes don't match default Surefire patterns (`*Test` etc.) -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<useModulePath>false</useModulePath> <!-- https://issues.apache.org/jira/browse/SUREFIRE-1809 -->
<useFile>false</useFile>
<includes>
<include>**/*Test</include>
<include>**/*Spec</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-bom</artifactId>
<version>2.0-M5-groovy-3.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Mandatory dependencies for using Spock -->
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-junit4</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
很抱歉对spock-junit4
产生误解。如果您想在Spock 2下运行JUnit 4扩展,比如PowerMock runner,您只需要使用它。如果你想在Spock 2测试之外运行JUnit 4测试,你需要org。朱尼特。vintage:junit vintage引擎:Spock 2.0-M5的5.7.1
。添加这种依赖性,为我修复你的POM。
然而,我冒昧地升级到了Spock 2.0决赛、Groovy 3.0.8和JUnit 5.7.2,所有这些都与Spock 2.0保持一致。如果使用默认的Maven目录布局,并将Spock规范命名为src/test/groovy/*test
,而不是*Spec
,甚至可以不使用Surefire类名过滤器。但是,您应该指定Java源代码和目标级别。没有它们,我的JDK抱怨默认的1.5版本。
<?xml version="1.0"?>
<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>org.spockframework</groupId>
<artifactId>spock-example</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Spock Framework - Example Project</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<groovy.version>3.0.8</groovy.version>
</properties>
<build>
<plugins>
<!-- Mandatory plugins for using Spock -->
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.12.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compileTests</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<useModulePath>false</useModulePath> <!-- https://issues.apache.org/jira/browse/SUREFIRE-1809 -->
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-bom</artifactId>
<version>2.0-groovy-3.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.7.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<scope>test</scope>
</dependency>
<!-- Required if you want to run JUnit 4 tests alongside Spock 2 -->
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
附言:事实上,首先我想把你的问题作为那个问题的重复来结束。但因为从那以后版本号有了一些变化,我想我会在这里发布一个新的答案,以方便大家。
更新:您可以通过添加. java
或. class
扩展来修复问题中的过滤器,从而确保名为*Test
和*Spec
的睾丸都被执行。奇怪的是,. groovy
不起作用,这是一个众所周知的Surefire怪癖。
<includes>
<include>**/*Test.class</include>
<include>**/*Spec.class</include>
</includes>
或
<includes>
<include>**/*Test.java</include>
<include>**/*Spec.java</include>
</includes>
现有结构:src/test/java-- 更新:我也尝试了构建助手插件 现在,如果我运行“测试”目标,我看到添加了C:\Developer\Code\myProj\rc\test\groovy。 但是我没有看到任何为groovy文件生成的类。 最后的答案,感谢@khmarbaise,我刚刚升级了版本,并删除了GMaven编译
我目前有一个maven Web项目,我正在尝试为其编写集成测试。对于项目的结构,我在src/test/java下定义了测试存根,而这些存根的Spring bean定义位于src/test/资源下。 我想做的是,当我构建我的war工件时,我希望所有的测试存根类都被编译并与Springbean定义文件一起包含在war中。我曾尝试使用maven war插件来实现这一点,但我唯一能够复制的就是资源。简单地
问题内容: 我想开始为我的Python代码编写单元测试,而py.test框架听起来比Python捆绑的unittest更好。因此,我在项目中添加了“ tests”目录,并在其中添加了test_sample.py。现在,我想配置PyCharm以运行“ tests”目录中的所有测试。 据称,PyCharm在其测试运行程序中支持py.test。您应该能够创建运行/调试配置来运行测试,并且PyCharm据
包括和配置模块 某些模块只能用于特定功能。 pap模块就是这样,仅用于身份验证。 相反,sql模块可用于授权,会话检查以及记帐。 这完全取决于模块作者所包含的功能。 sql模块(rlm_sql.so)使用子模块。 这创建了一个抽象层。 根据主sql模块的配置方式,它将使用特定的子模块与某种类型的数据库进行交互。 子模块可用于连接MySQL(rml_sql_mysql.so),PostgreSQL(
我目前对Java和cucumber有一个问题。通过使用硒访问网站的元素,我想使用以下短语: 该示例非常简单,通过使用Java注释,可以很好地处理每个属性名 除了以下用例:属性名包含类似于的括号。 在使用Eclipse和JUnit时,使用包含类似括号的字符串的Cucumber测试甚至不能完全识别,而只能识别开头括号之前的字符串部分。有什么想法或解决方案吗?
我试图将Jenkins配置为包括运行JUnit测试的构建后步骤,但遇到了一个错误: 詹金斯步骤本身就显示了一个问题: 这并不奇怪,因为我在targets下没有surefire-reports子文件夹,而且我不知道要生成xml报表必须做什么。我对Java、Maven、Eclipse、Linux-一切都是新手--而且是独自工作。 我看到了关于设置这个后期构建步骤的内部说明,但现在我需要知道如何使其工作