TestNG設定
我個人覺得TestNG比Junit好用多了,文件也漂亮多了,更不用像Junit 3->4->5 像在擠牙膏一樣,功能慢慢加, 每次都要重新學,TestNG從一開始就功能強大,學習的CP值比較高(但您若要使用spring-boot這種框架,Junit就具有天生的優勢,不熟的人要用就比較會有困擾)。
Maven的外掛設定如下:
<project>
<properties>
<surefire.version>3.2.5</surefire.version>
</properties>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId><!--Maven 的單元測試外掛-->
<version>${surefire.version}</version>
<configuration>
<systemPropertyVariables>
<catalina.home>${project.build.directory}</catalina.home><!--這是我Log4J2會用到的系統變數,跟TestNG無關-->
<systemPropertyVariables>
<parallel>classes</parallel><!--以類別的方式進行平行測試,也就是測試Class之間無關聯,可同時開啟測試-->
<suiteXmlFiles><!--TestNG設定檔-->
<suiteXmlFile>${project.build.testOutputDirectory}/testng-unit.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
<build>
</project>
從上面的設定瞭解到,在 src/test/resources下有一支testng-unit.xml描述測試如何進行
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="${project.name}單元測試" thread-count="4" skipfailedinvocationcounts="false" parallel="classes" verbose="10">
<test name="分群測試功能" enabled="true" enabled="true">
<parameter name="contextPath" value="/${project.artifactId}"/>
<parameter name="http.port" value="8080"/>
<classes>
<class name="you.wanna.testClass.className">
<!--<methods>
<include name="testSomeMethod1" />
<include name="testSomeMethod2" />
<methods>-->
</class>
</classes>
</test>
</suite>
<parameter>是一些自訂的參數,可以代入測試類別內。
<classes>指定那些要進行測試的類別。
測試類別可能包含一堆要測試的方式,常常我們的測試類別內,包含多個測試,但若測試不通過時,我們可以將某些測試Methos隔離出來,單獨測試並查找出錯誤原因。 那時就可以在<method>指定那些特別methos進行測試。
下面特別簡單說明一下TestNG的測試
public class TestSomeUnit {
private String contextPath;
private int httpPort;
@BeforeClass //類別執行前必定先執行的段落,可以帶參數,並決少時給預設值
public void setup(@Optional("8080") int httpPort,
@Optional("/HelloWorld") String contextPath){
this.contextPath = contextPath;
this.port = port;
}
@AfterClass
public void tearDown() {
//類別測試結束後,一定要到此進行善後
}
@Test(description = "登錄")
void testLogin() throws Exception {
//進行登錄
}
@Test(description="查詢個資",dependsOnMethods="testLogin")
void testMyprofile() throws Exception{
//查詢測試
}
@Test(description="Other Test")
void testOther(){
//其它測試
}
}
上述測試碼中的testMyprofile(),本身包含先後順序(有相依性),所以需要隔離出來單獨測試時,兩個Methods都一定要被隔離出來。
另外TestNG也提供檢測一定要發生的錯誤,或者平行測試、多執行緒測試等多種測試功能。
當進行過單元測試 mvn test
後,我們就可以用瀏覽器開啟下列檔案,查看測試報告。
./target/surefire-reports/index.html