【问题标题】:can't able to call code inside src/test/java from src/main/java?无法从 src/main/java 调用 src/test/java 中的代码?
【发布时间】:2020-01-22 12:43:11
【问题描述】:

我正在使用 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);
        }
}

【问题讨论】:

标签: java testng testng-eclipse


【解决方案1】:

你试过把它们放在同一个包里吗?这通常是您设置 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 方面,是的也应该能够将测试放在 src/test 中。请参阅 this answer 使用 testNG 的示例文件夹布局。

【讨论】:

  • “部署后”是什么意思?默认情况下,测试类不包含在生成的 jar 中。
  • 同意,认为他的意思是如果测试在 src/test 中,我该如何运行测试。有点两管齐下的问题。但是在 src/test 中进行测试不应该是一个绊脚石,这才是他们应该去的地方。
  • @mnesarco 我想创建一个 API,它将在 src/main/java 中调用 runTestNg(),这将触发 src/test/java 中的测试用例,希望能做这样的事情。
  • @user176692 有什么方法可以调用在 src/test/java 下编写的测试用例,从 scr/main/java 中任何类下编写的方法调用?
  • @mnesarco 当我在做 maven 构建时,它工作正常,所有测试用例都在运行并生成报告,但我正在寻找类似 UI 端的东西,我会在单击该按钮后给一个按钮所有测试用例将运行并生成报告。(部署后*),因此我需要类似的东西,我可以从 src/test/main 调用 src/test/java
【解决方案2】:

这可能取决于您的项目的设置方式,但我知道对于我的所有项目,IntelliJ 测试文件夹中的任何内容都不会让您从主文件夹调用,只能反过来。 idk 如果这是一个 java 的东西,或者专门来自 IDE,但通常你不希望在实际构建中依赖测试包中的任何东西。

补充一点,我很确定您的项目的测试包是专门为测试您正在构建的代码而设计的,并且不会在程序运行时包含在程序的实际构建中。因此,对其中的类的任何调用实际上都不会在程序运行期间调用任何内容。如果您尝试创建在程序运行时运行的某种形式的测试,我会在 src/main/ 中创建它,然后在那里为您的验证测试创建一个包,它们将包含在构建中。请记住,默认情况下,这些测试不会在任何 CICD 样式的构建检查中运行,因此,如果您的所有测试都在其中,您可能会得到一个错误的程序,通过检查没有失败的测试失败。

【讨论】: