gpt4 book ai didi

java - 如何使用 JUnit4 测试 Maven 插件

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:00 25 4
gpt4 key购买 nike

我正在编写一个 Maven 插件并想编写一些 JUnit 测试。我遵循了 Maven Plugin Testing 中的描述.不幸的是,在我配置或调用任何东西之前,我在测试设置期间不断收到异常。

这是我的 JUnit 测试代码:

public class ResetMojoTest {

private static final String POM_FILE_NAME = "/path/to/pom.xml";

@Rule
public MojoRule rule = new MojoRule();

@Test
public void testSomething()
throws Exception
{
File pom = new File(POM_FILE_NAME);
Assert.assertNotNull( pom );
Assert.assertTrue( pom.exists() );

ResetMojo resetMojo = (ResetMojo) rule.lookupMojo( "touch", pom );
Assert.assertNotNull( resetMojo );
resetMojo.execute();
}

}

这是异常的堆栈跟踪:

java.io.IOException: Stream closed
at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:134)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at org.apache.commons.io.input.BOMInputStream.getBOM(BOMInputStream.java:175)
at org.apache.commons.io.input.BOMInputStream.getBOMCharsetName(BOMInputStream.java:201)
at org.apache.commons.io.input.XmlStreamReader.doRawStream(XmlStreamReader.java:412)
at org.apache.commons.io.input.XmlStreamReader.<init>(XmlStreamReader.java:206)
at org.apache.commons.io.input.XmlStreamReader.<init>(XmlStreamReader.java:171)
at org.apache.commons.io.input.XmlStreamReader.<init>(XmlStreamReader.java:140)
at org.apache.maven.plugin.testing.AbstractMojoTestCase.setUp(AbstractMojoTestCase.java:119)
at org.apache.maven.plugin.testing.MojoRule$2.evaluate(MojoRule.java:299)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)

关于如何让它工作有什么想法吗?

最佳答案

也遇到了这个问题。 mojo 规则失败,因为它实例化了 AbstractMojoTestCase 的匿名实现,然后查找然后尝试创建输入流加载数据:InputStream is = getClass().getResourceAsStream( "/"+ getPluginDescriptorLocation() );。这 (getPluginDescriptorLocation()) 只是一个硬编码的文件字符串 "META-INF/maven/plugin.xml"

我通过添加以下依赖项解决了这个问题:

<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
<version>3.5.0</version>
</dependency>

我不确定为什么这样可以解决问题。该文件仍然不存在(我已经检查了原始源和 target 目录,但两者都不存在)。因此,需要进行额外的搜索才能弄清楚为什么会这样。

这里是我的依赖,供引用。

<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.twdata.maven</groupId>
<artifactId>mojo-executor</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-api</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
<version>3.5.0</version>
</dependency>
<!--Test Dependencies-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>3.3.0</version>
<scope>test</scope>
</dependency>

关于java - 如何使用 JUnit4 测试 Maven 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24278423/

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