我有多个测试类,应该按顺序执行。我创建了包含以下内容的testng.xml
文件。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="MyTestSuite1" verbose="2" parallel="methods" thread-count="1">
<listeners>
<listener class-name="utils.TestNGListener"></listener>
</listeners>
<test name="Regression" parallel="false" verbose="2">
<classes>
<class name="test.LoginTest" />
<class name="test.ClearTest" />
<class name="test.SendMessageTest" />
</classes>
</test>
</suite>
我为项目创建了main()
方法以提供入口点。
public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
TestNG testNG = new TestNG();
String xmlFileName = "testng.xml";
List<XmlSuite> suite = (List<XmlSuite>)(new Parser(xmlFileName).parse());
testNG.setXmlSuites(suite);
testNG.run();
}
我不确定,如何按指定的顺序执行测试套件,收到错误信息。
线程“main”中的异常org.testng.TestNGException:无法找到 classpath中的类:test.LoginTest
tree
命令的输出:
C:.
├───.idea
│ └───libraries
├───META-INF
├───out
│ └───artifacts
├───resources
│ └───leanftjar
├───RunResults
│ └───Resources
│ ├───Snapshots
│ └───User
├───src
│ ├───main
│ │ ├───java
│ │ │ ├───hu
│ │ │ │ └───mysoft
│ │ │ ├───jar
│ │ │ │ └───META-INF
│ │ │ ├───META-INF
│ │ │ ├───unittesting
│ │ │ └───utils
│ │ └───resources
│ └───test
│ └───java
│ └───test
├───target
│ ├───classes
│ │ ├───hu
│ │ │ └───mysoft
│ │ ├───leanftjar
│ │ ├───unittesting
│ │ └───utils
│ ├───generated-sources
│ │ └───annotations
│ ├───generated-test-sources
│ │ └───test-annotations
│ ├───maven-status
│ │ └───maven-compiler-plugin
│ │ └───compile
│ │ └───default-compile
│ └───test-classes
│ └───test
└───test-output
├───All Test Suite
├───junitreports
└───old
└───All Test Suite
答案 0 :(得分:6)
问题在于您的代码。默认情况下,位于src/main/java
下的类不具有驻留在src/test/java
中的类的可见性。因此,当你从src/main/java
在main()方法中创建TestNG实例时,TestNG正在尝试从同一个类加载类,因为它找不到它,所以它会抛出异常。
要解决此问题,请将包含main()方法的类移到src/test/java
下的包中,然后重试。它会工作。
答案 1 :(得分:2)
为了执行TestNG测试,您应该使用org.testng.annotations.Test
class
@Test
public void testMyMethod() {
使用testng.xml
时请参阅example
// 1. To run with testng.xml file, uncomment this one, comment 2 testng.setTestSuites(Arrays.asList("testng.xml"));
要执行测试,请使用setPreserveOrder
:
testng.setPreserveOrder(true);
答案 2 :(得分:1)
如果按顺序运行这些步骤是一项艰难的要求,为了让您的测试通过,似乎应该在测试中内部实现它们。
@Test
public void doIt() {
login();
clearMessage();
sendMessage();
}
通过适当的成功检查将作为一个单元失败,而不是隐藏测试维护人员的操作,并在测试失败的情况下提供更好的调试输出而不是&#34;三个测试拼凑在一起&#34; 34。