我正在使用 testNG 编写测试用例,所有测试用例代码都在 src/test/java 文件夹内,现在我想在部署应用程序后从 src/main/java 内的类运行此文件夹内的测试用例,是否可能?
src/main/java->TestNGRun下的文件
public class TestNGRun {
public static void runTestNg() {
TestListenerAdapter tla = new TestListenerAdapter();
TestNG testNG = new TestNG();
testNG.addListener(tla);
List<String> suites = new ArrayList<String>();
URL filePathUrl = TestNGRun.class.getClassLoader().getResource("/testng.xml");
suites.add(filePathUrl.getPath());
testNG.setTestSuites(suites);
testNG.run();
}
}
src/main/resources下的文件--> testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<listeners>
<listener
class-name="com.cypress.prodService.testNG.CustomisedReports"></listener>
</listeners>
<test name="ProductServiceImplTest">
<classes>
<class
name="com.cypress.prodService.testNG.ProductServiceImplTest"></class>
</classes>
</test>
</suite>
src/test/java 下的文件 --> ProductServiceImplTest.java
@Test
public class ProductServiceImplTest {
@Test
public void addProduct() {`enter code here`
String value="GoodMorning";
assertEquals("Hello", value);
}
}
您是否尝试过将它们放在同一个包中?这通常就是设置 JUnit 测试的方式。这是一个 JUnit5 示例,但使用 JUnit Platform Launcher,通过选择包来发现测试是可行的:
https://github.com/doenn/sentences/tree/master/src https://github.com/doenn/sentences/blob/master/src/test/java/sentences/SentencesTest.java https://github.com/doenn/sentences/blob/master/src/main/java/sentences/SentenceTests.java
在 testNG 方面,yes 也应该能够将测试放入 src/test 中。请参阅此答案,了解 testNG 的示例文件夹布局。
这可能取决于您的项目的设置方式,但我知道对于我的所有项目,测试文件夹 IntelliJ 中的任何内容都不会让您从主文件夹调用,只有相反。 idk 如果这是一个 java 事物或者专门来自 IDE,但通常您不想在实际构建中依赖测试包中的任何内容。
补充一下,我很确定您的项目的测试包是专门为测试正在构建的代码之外的代码而设计的,并且在程序运行时不包含在程序的实际构建中。因此,在程序运行期间,对其中的类的任何调用实际上都不会调用任何内容。如果您尝试创建某种形式的在程序运行时运行的测试,我会在 src/main/ 中创建它,然后为您的验证测试创建一个包,它们将包含在构建中。请记住,默认情况下,这些测试不会在任何 CICD 风格的构建检查中运行,因此,如果您的所有测试都在那里,您可能会得到一个有缺陷的程序,其中测试通过了检查,但没有失败。
将依赖项的scope更改为compile而不是Test。这适用于我在 src/main/java 中运行 testng 代码。
<!-- TestNG -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>compile</scope>
</dependency>