我正在运行具有假设运行时模块(或插件,但你称之为)的结构的项目,如 C 风格的 .so 对象。目前它只能通过 工作ClassLoader
,我正在尝试使用 maven 来测试它。我在项目的测试目录中编写Test.java
和TestModule.java
文件。但是 maven 只尝试同时运行它们Test.java
。如何指定测试文件?
PS除了加载模块之外还有其他系统ClassLoader
吗?而新的国外模块必须是依赖于我核心项目的项目?
Maven - 与任何其他构建系统一样 - 需要区分生产代码和测试代码。推荐的变体是使用目录结构分隔两个类:
/src
/main
/java
-- your production classes go here
/test
/java
-- your test classes go here
如果您的项目具有不同的结构,您可以更改文件中的默认行为pom.xml
(不推荐):
<build>
<sourceDirectory>${basedir}/src/</sourceDirectory>
<testSourceDirectory>${basedir}/test</testSourceDirectory>
<outputDirectory>${basedir}/bin</outputDirectory>
<testOutputDirectory>${basedir}/test-bin</testOutputDirectory>
...
</build>
如果您将生产和测试代码都放在同一个目录中(不好,不好),您可以告诉 Maven 在运行测试中包含或排除类:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<includes>
<include>Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
您仍然需要某种命名约定来标识测试类(建议:对于类MyClass
,应调用相应的测试类MyClassTest
):
<includes>
<include>**/*Test.java</include>
</includes>
Maven 使用maven-surefire-plugin运行测试。因此它执行测试 目标。
includes属性定义了哪些类将被视为测试类。默认名称模式是:
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>
因此,如果您不希望在 maven 测试阶段执行测试(可能是因为您只想手动运行此测试),则可以更改includes
属性或重命名您的类(例如 CheckModule 而不是 TestModule)。
如果您TestModule.java
是应用程序代码而不是某种测试代码,则不要将其放在测试目录中。看看Maven 默认目录布局并尽可能使用它。