我有这样的界面:
public interface IntegrationTest {
}
Run Code Online (Sandbox Code Playgroud)
我像这样配置故障安全插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.14</version>
<configuration>
<groups>acme.test.IntegrationTest</groups>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果我然后创建这样的集成测试
@Category(IntegrationTest.class)
public class ExampleClassIntegrationTest {
@Test
public void slow_and_painful_test() {
Run Code Online (Sandbox Code Playgroud)
此测试不会运行.
**/IT*.java
**/*IT.java
**/*ITCase.java
Run Code Online (Sandbox Code Playgroud)
像这样:
@Category(IntegrationTest.class)
public class ExampleClassIT {
@Test
public void slow_and_painful_test() {
Run Code Online (Sandbox Code Playgroud)
测试运行正常.为什么我必须命名测试并在使用groups-tag时有注释?我错过了什么吗?使用JUnit 的文档声明您可以在类级别使用Category注释.
我有一个Maven 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.xxx.xxxx.testing.ranger</groupId>
<artifactId>ranger-parent</artifactId>
<relativePath>../parent/pom.xml</relativePath>
<version>1.0.0</version>
</parent>
<artifactId>ranger-api-tests</artifactId>
<name>Ranger API Tests</name>
<description>Ranger API integration tests. Depends on the Ranger test framework project.</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<test.groups />
<surefire.and.failsafe.report.dir>C:/Users/xxx/Documents/Projects/LearnCubeAPIIT/tests/target</surefire.and.failsafe.report.dir>
</properties>
<dependencies>
<!-- Granite Testing framework -->
<dependency>
<groupId>com.xxx.xxxx.testing.ranger</groupId>
<artifactId>ranger-api-it-framework</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.16</version>
<configuration>
<parallel>classes</parallel>
<threadCount>4</threadCount>
<reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory> …Run Code Online (Sandbox Code Playgroud) 看起来surefire 和failsafe 插件按顺序执行测试类,而在类中定义的测试以不确定的顺序执行。
为了发现依赖于顺序的测试(我们认为是糟糕的测试),我们希望强制每次运行的顺序不同。理想情况下,我们有一个机制来禁用随机化或一个重复顺序的种子编号(必须像旧的 Palm OS 模拟器有一个种子编号来驱动一系列随机测试)。
如果您知道这样做的方法,请告诉我?如果没有,我想我可以将其放入本地分支然后提交。
谢谢
彼得
我有一些使用故障安全插件运行的集成测试。这一直有效,Spring Boot 2.3.5.RELEASE但在迁移到2.4.0IT后不再执行。
1)有人有同样的问题吗?
2) 如何调试故障安全以找出未执行测试的原因?
升级到 Spring Boot 2.4.2 (Spring 5.3.3) 后,我们的 Spring Context 测试失败了:
lut 15, 2021 4:37:49 PM org.junit.jupiter.engine.execution.JupiterEngineExecutionContext close
SEVERE: Caught exception while closing extension context: org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext@27be17c8
java.lang.IllegalStateException: Failed to find merged annotation for @org.springframework.test.context.BootstrapWith(org.springframework.boot.test.context.SpringBootTestContextBootstrapper.class)
at org.springframework.util.Assert.state(Assert.java:97)
at org.springframework.test.context.TestContextAnnotationUtils$AnnotationDescriptor.<init>(TestContextAnnotationUtils.java:513)
at org.springframework.test.context.TestContextAnnotationUtils.findAnnotationDescriptor(TestContextAnnotationUtils.java:252)
at org.springframework.test.context.TestContextAnnotationUtils.findAnnotationDescriptor(TestContextAnnotationUtils.java:214)
at org.springframework.test.context.BootstrapUtils.resolveExplicitTestContextBootstrapper(BootstrapUtils.java:157)
at org.springframework.test.context.BootstrapUtils.resolveTestContextBootstrapper(BootstrapUtils.java:130)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:122)
at org.junit.jupiter.engine.execution.ExtensionValuesStore.lambda$getOrComputeIfAbsent$4(ExtensionValuesStore.java:86)
at org.junit.jupiter.engine.execution.ExtensionValuesStore$MemoizingSupplier.get(ExtensionValuesStore.java:205)
at org.junit.jupiter.engine.execution.ExtensionValuesStore$StoredValue.evaluate(ExtensionValuesStore.java:182)
at org.junit.jupiter.engine.execution.ExtensionValuesStore$StoredValue.access$100(ExtensionValuesStore.java:171)
at org.junit.jupiter.engine.execution.ExtensionValuesStore.lambda$closeAllStoredCloseableValues$1(ExtensionValuesStore.java:65)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
at java.base/java.util.concurrent.ConcurrentHashMap$ValueSpliterator.forEachRemaining(ConcurrentHashMap.java:3612)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at org.junit.jupiter.engine.execution.ExtensionValuesStore.closeAllStoredCloseableValues(ExtensionValuesStore.java:68)
at org.junit.jupiter.engine.descriptor.AbstractExtensionContext.close(AbstractExtensionContext.java:74)
at org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.close(JupiterEngineExecutionContext.java:53)
at …Run Code Online (Sandbox Code Playgroud) Maven故障安全插件不会在我的项目上运行.如果我运行mvn验证只有surefire运行.如果我键入mvn failsafe:验证它失败并出现以下错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.11:verify (default-cli) on project experiment-server: /home/user/workspace/MyProject-Main/MyProject-IntegrationTest/target/failsafe-summary.xml (The system cannot find the path specified) -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
所以我基本上有同样的问题:failafe插件不会在一个项目上运行但会在另一个项目上运行 - 为什么? 不同的是,我的pom已经看起来像这样:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.14.1</version>
<executions>
<execution>
<id>failsafe-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>failsafe-verify</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这就是这个家伙问题的解决方案.除了这个网站上的解决方案对我不起作用.有人能说出我搞砸了的地方吗?
我还有一个问题,我想在预集成阶段使用exec-maven-plugin启动服务器.但是当我尝试mvn-verify时,它是最后执行的东西.
我的开发环境是Netbeans 7.4和Maven 3.0.5(与Netbeans捆绑在一起)。我正在使用 JUnit 4.11 构建单元(以 Test 结尾的类名)和集成测试(以 IT 结尾的类名)。我正在运行单元测试并排除使用“-DskipITs”Maven 选项的集成测试。我有一个自定义操作,仅运行带有故障安全插件的集成测试。两者都执行成功。但是,在运行单元测试时,我只能在“测试结果”窗口中看到结果。如何让集成测试显示在“测试结果”窗口中?通过集成测试,我只能看到控制台中的输出。
在我的项目中,我确实可以进行故障安全测试.
如果我运行,mvn clean install -DskipTests则跳过两种测试.
如果我尝试使用-Dit.test = TestName运行单个故障安全测试,那么首先运行所有的surefire测试然后我的测试..但是因为可靠性测试需要很长时间,这是不好的.
在某些情况下,我想跳过surefire测试,但运行故障安全IT测试.
unit-testing maven maven-surefire-plugin maven-failsafe-plugin
我已经开始了一个新项目:PostfixSQLConfig。这是一个简单的Spring Boot应用程序,必须为4个简单的数据库表提供CRUD访问。我为第一个表编写了存储库,并为该存储库编写了一些基本的集成测试。由于此特定表不应提供更新功能,因此我将更新功能实现为:
@Override
public void update(@NonNull Domain domain) throws NotUpdatableException {
throw new NotUpdatableException("Domain entities are read-only");
}
Run Code Online (Sandbox Code Playgroud)
NotUpdatableException我的自定义异常类在哪里。
此代码的IT如下所示:
@Test(expected = NotUpdatableException.class)
public void testUpdate() throws NotUpdatableException {
val domain = Domain.of("test");
domainRepository.update(domain);
}
Run Code Online (Sandbox Code Playgroud)
如果从我的IDE(IntelliJ 2018.2 EAP)运行此测试,它将通过,但运行mvn verify失败并显示以下信息:
java.lang.NoClassDefFoundError: com/github/forinil/psc/exception/NotUpdatableException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at org.apache.maven.surefire.util.ReflectionUtils.tryGetMethod(ReflectionUtils.java:60)
at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.isSuiteOnly(JUnit3TestChecker.java:65)
at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.isValidJUnit3Test(JUnit3TestChecker.java:60)
at org.apache.maven.surefire.common.junit3.JUnit3TestChecker.accept(JUnit3TestChecker.java:55)
at org.apache.maven.surefire.common.junit4.JUnit4TestChecker.accept(JUnit4TestChecker.java:53)
at org.apache.maven.surefire.util.DefaultScanResult.applyFilter(DefaultScanResult.java:102)
at org.apache.maven.surefire.junit4.JUnit4Provider.scanClassPath(JUnit4Provider.java:309)
at org.apache.maven.surefire.junit4.JUnit4Provider.setTestsToRun(JUnit4Provider.java:189)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:132)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:379)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:340)
at …Run Code Online (Sandbox Code Playgroud) 在 maven 中使用 shade-plugin 并稍后尝试使用 failsafe-plugin 运行集成测试时,当故障安全即将运行时,我收到以下错误,导致我的集成测试被跳过:
[ERROR] Invalid signature file digest for Manifest main attributes
Run Code Online (Sandbox Code Playgroud)
此错误似乎是由依赖项中的签名 jar 引起的。这个答案建议使用依赖插件过滤掉签名,但它似乎对我不起作用。Shade-plugin 只是解压了所有的依赖,并没有解决问题。我怎样才能使这项工作?
maven ×6
java ×5
junit ×3
spring-boot ×3
jar ×1
junit4 ×1
netbeans-7 ×1
spring ×1
testing ×1
unit-testing ×1