Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing Surefire不会';t在src/main/java中启动测试_Unit Testing_Maven_Maven Surefire Plugin - Fatal编程技术网

Unit testing Surefire不会';t在src/main/java中启动测试

Unit testing Surefire不会';t在src/main/java中启动测试,unit-testing,maven,maven-surefire-plugin,Unit Testing,Maven,Maven Surefire Plugin,我需要根据maven jar插件文档=> 我这样做是因为,我在测试范围内的另一个项目中使用了测试(helper)类 因此,我创建了我的项目测试,移入测试类,并将surefire配置为指定测试类目录=> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifact

我需要根据maven jar插件文档=>

我这样做是因为,我在测试范围内的另一个项目中使用了测试(helper)类

因此,我创建了我的项目测试,移入测试类,并将surefire配置为指定测试类目录=>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <testSourceDirectory>${basedir}\src\main\java\</testSourceDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>

问题与此相同=>但解决方案(配置surefire maven插件)对我不起作用。

由于测试类现在已放置在
src/main/java
中,它们很可能在编译阶段被编译为
目标/类

因此,尽管surefire被配置为指示测试源位置是
src/main/java
,但它仍然会在
目标/测试类中查找测试类,因为这是测试类的默认位置

您可以尝试适当地指定参数,看看它是否有效


另外,我认为您可能误解了maven jar插件文档中的建议。我不相信他们建议将测试源代码移动到
src/main/java

maven surefire插件的良好配置是=>

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <testSourceDirectory>${basedir}/src/main/java/</testSourceDirectory>
                    <testClassesDirectory>${project.build.directory}/classes/</testClassesDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

Results :

Tests run: 20, Failures: 0, Errors: 0, Skipped: 0

org.apache.maven.plugins
maven surefire插件
${basedir}/src/main/java/
${project.build.directory}/classes/
结果:
测试运行:20,失败:0,错误:0,跳过:0

您是否正在尝试运行集成测试?此外,为什么要定义testSourceDirectory?为什么要使用反斜杠?正如@khmarbaise提到的,它可能来自反斜杠。我尝试了${basedir}/src/main/java/或src/main/java/但测试运行相同:0,失败:0,错误:0,跳过:0好的,我会尝试。但是maven jar插件的建议很明确:“将源文件从您想要共享的src/test/java从原始项目移动到这个项目的src/main/java。当然,同样类型的移动也会对资源产生影响。”@Antoine。你说得对。我熟悉
简易方法
,但从未意识到
首选方法
。我也会更新答案。虽然这会起作用,但它绝对不是一个好的配置,因为它没有遵循Maven的方式。源代码应该在
src/main/java
中。他们编译的类将位于
target/classes
中。测试源应位于
src/Test/java
中。他们编译的类将位于
目标/测试类中
。这是正确的惯例,这样Surefire将开箱即用。将测试放在与模块源代码相同的目录中是不正确的。我没有将测试类放在同一目录中,而是创建了另一个后缀为“-tests”的项目。这是maven jar插件help=>=>“如何创建包含测试类的jar”=>“首选方式”的推荐,谢谢-这对我帮助很大。我正在开发一组Koan,这些Koan(最初)没有通过单元测试,但在src/main中(已经完成的Koan在src/test目录中),因此我需要能够在src/main中的代码上调用surefire JUnit插件。非常感谢您的帮助。这也适用于maven故障保护插件。这就是我需要这个的原因!谢谢你,安托万!
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <testSourceDirectory>${basedir}/src/main/java/</testSourceDirectory>
                    <testClassesDirectory>${project.build.directory}/classes/</testClassesDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

Results :

Tests run: 20, Failures: 0, Errors: 0, Skipped: 0