如何包含src/test/java文件来运行TestNG测试



我只是在学习Java,需要您的帮助。我正在使用Eclipse,并使用org.openjfx原型创建了一个Maven项目。除了我试图用src/test/java编写测试时,一切似乎都很好,这会导致一个错误。

实例化类时出错starcraft.warcraft.test.TestClass:无法公开starcraft.warcraft.test.TestClass((可访问:模块starcraft.warcraft没有";出口星际飞船。军舰。测试;到模块组织测试

这就是我在Eclipse中使用默认设置创建项目的方式:

使用Maven原型选择进行项目设置

现在,当Eclipse创建项目时,它没有src/test/java文件夹,所以我手动创建它。然后我创建了一个名为";TestClass";包装内";星际飞船.飞行器.试验;在src/test/java中,我添加了一个简单的方法来在名为";加法器";。你可以看到项目结构

项目结构

package starcraft.warcraft;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class App extends Application {
@Override
public void start(Stage stage) {
var javaVersion = SystemInfo.javaVersion();
var javafxVersion = SystemInfo.javafxVersion();
var label = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
var scene = new Scene(new StackPane(label), 640, 480);
stage.setScene(scene);
stage.show();
}

// WILL TEST THIS METHOD
public static int adder(int digit1, int digit2) {
return digit1 + digit2;
}

public static void main(String[] args) {
launch();
}
}

现在我想使用TestNG进行测试,所以我把它包含在我的POM中,这就是

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>starcraft</groupId>
<artifactId>warcraft</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<executions>
<execution>
<!-- Default configuration for running -->
<!-- Usage: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>starcraft.warcraft.App</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

这是Maven原型创建的默认POM,除了我添加的TestNG依赖项。当我尝试使用TestNG时,Eclipse会让我将其添加到模块路径中,如下所示:

Maven说我需要添加TestNG库

这是我的模块信息:

module starcraft.warcraft {
requires javafx.controls;
requires org.testng;

exports starcraft.warcraft;
}

好的,到目前为止一切都很好,但现在当我尝试在TestClass:中运行测试时

package starcraft.warcraft.test;
import org.testng.annotations.Test;
import starcraft.warcraft.App;
public class TestClass {
@Test
public void testAdder() {

int sum = App.adder(1, 2);

System.out.println(sum);

}
}

我得到错误,再次是

实例化类时出错starcraft.warcraft.test.TestClass:无法公开starcraft.warcraft.test.TestClass((可访问:模块starcraft.warcraft没有";出口星际飞船。军舰。测试;到模块组织测试

我不知道如何进行导出。当我尝试在模块信息中输入时,它没有给我在src/test/java中添加包的选项,它只允许我从src/main/java中选择包。

我不太了解模块。如何让程序让我从src/test/java运行测试?

感谢所有看过这篇文章的人。我通过以下步骤解决了这个问题:

  1. 删除module-info.java。这将它变成一个非模块项目,对我来说很好。我犹豫了一下,因为Maven JavaFX原型包含了它,但正如它在这里所说

https://openjfx.io/openjfx-docs/#IDE-Eclipse

您可以在创建后将其删除。

  1. 如果你试图运行该项目,问题是它会警告你JavaFX没有作为模块包含。它仍然会运行,但最好是在未来出现问题时摆脱这种情况。因此,您需要下载JavaFX库,将它们放在硬盘驱动器中,然后通过Eclipse中的VM参数将它们包含在项目中:

右键单击项目->运行配置->"参数"选项卡->在VM参数区域中添加以下内容:

--module path[包含已下载JavaFX的lib文件夹的完全限定路径]--添加模块JavaFX.controls

路径将类似于";C: \javafx\lib"或者您放置下载的JavaFX的任何位置。

然后它应该运行,项目仍将使用Maven构建,但我不确定它是使用仍在Maven POM中的JavaFX还是我在C驱动器上指定的JavaFX。但它是有效的。如果能对那里发生的事情提供任何帮助,我们将不胜感激。感谢

最新更新