gpt4 book ai didi

单个附加测试的 Maven 执行

转载 作者:行者123 更新时间:2023-11-28 20:12:12 24 4
gpt4 key购买 nike

我是 Maven 的新手,一直在为附加测试而苦苦挣扎,我在这里找到了几篇文章,它们让我了解了其中的一部分,但最后一点还不太明白。这是我正在尝试做的。我有 2 个模块,其中一个定义了一组接口(interface)和这些接口(interface)的基本测试。第二个模块提供接口(interface)的实现,我想对其运行预定义的测试。我把它归结为一个简单的例子,这里有两个项目:

interface
+ pom.xml
+ src
+ main
+ java
+ demo
+ Messenger.java
+ test
+ java
+ demo
+ MessengerTest.java

impl
+ pom.xml
+ src
+ main
+ java
+ demo
+ impl
+ MessengerImpl.java
+ test
+ resources
+ context.xml

接口(interface)pom.xml:

<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">
<groupId>demo</groupId>
<artifactId>interface</artifactId>
<version>1.0</version>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

Messenger.java 源代码:

package demo;

public interface Messenger {
String getMessage();
}

MessengerTest.java 源代码:

package demo;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import demo.Messenger;

public class MessengerTest {
private BeanFactory beanfactory;

@Before
public void setUp() throws Exception {
beanfactory = new ClassPathXmlApplicationContext("context.xml");
}

@Test
public final void testGetMessage() throws Exception {
final Messenger msngr = beanfactory.getBean(Messenger.class);
String msg = msngr.getMessage();
assertNotNull(msg);
assertTrue(msg.length() > 0);
}
}

执行“mvn install”似乎正确地在我的本地存储库中创建了 interface-1.0.jar 和 interface-1.0-tests.jar。

实现代码很简单,pom.xml:

<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">
<groupId>demo</groupId>
<artifactId>impl</artifactId>
<version>1.0</version>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>

<dependencies>
<dependency>
<groupId>demo</groupId>
<artifactId>interface</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>demo</groupId>
<artifactId>interface</artifactId>
<version>1.0</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>

</project>

MessageImpl.java 源代码:

package demo.impl;

import demo.Messenger;

public class MessengerImpl implements Messenger {

@Override
public String getMessage() {
return "Hello World";
}
}

最后,spring 上下文文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="MyMessenger" class="demo.impl.MessengerImpl"/>
</beans>

所有这些都准备就绪后,我执行“mvn -Dtest=demo.MessengerTest test”,不幸的是它失败了,“...没有执行任何测试!”。那么问题来了。

抱歉,啰嗦了这么久,但我想说得相当完整,如有任何指导,我们将不胜感激。

最佳答案

Surefire 在决定运行哪些类时不会扫描类路径,因此通常只考虑在同一模块中定义的测试。它检查 impl 项目中的 target/classes,没有看到任何测试,并忽略 MessengerTest。您可以在引用要运行的测试的 impl 项目中定义一个测试套件,或者将依赖项解压缩到 target/classes 中。

关于单个附加测试的 Maven 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15845549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com