转自:http://www.mkyong.com/unittest/testng-tutorial-7-dependency-test/
In TestNG, we use dependOnMethods
and dependsOnGroups
to implement dependency testing. If a dependent method is fail, all the subsequent test methods will be skipped, NOT failed.
1. dependOnMethods Example
A simple example, “method2()” is dependent on “method1()”.
1.1 If method1()
is passed, method2()
will be executed.
package com.mkyong.testng.examples.dependency; import org.testng.annotations.Test; public class App { @Test public void method1() { System.out.println("This is method 1"); } @Test(dependsOnMethods = { "method1" }) public void method2() { System.out.println("This is method 2"); } }
Output
This is method 1
This is method 2
PASSED: method1
PASSED: method2
=============================================== Default test Tests run: 2, Failures: 0, Skips: 0 ===============================================
1.2 If method1()
is failed, method2()
will be skipped.
package com.mkyong.testng.examples.dependency; import org.testng.annotations.Test; public class App { //This test will be failed. @Test public void method1() { System.out.println("This is method 1"); throw new RuntimeException(); } @Test(dependsOnMethods = { "method1" }) public void method2() { System.out.println("This is method 2"); } }
Output
This is method 1
FAILED: method1
java.lang.RuntimeException
at com.mkyong.testng.examples.dependency.App.method1(App.java:10) //... SKIPPED: method2 =============================================== Default test Tests run: 2, Failures: 1, Skips: 1 ===============================================
2. dependsOnGroups Example
Let create few test cases to demonstrate the mixed use of dependsOnMethods
anddependsOnGroups
. See comments for self-explanatory.
package com.mkyong.testng.examples.dependency; import org.testng.annotations.Test; //all methods of this class are belong to "deploy" group. @Test(groups="deploy") public class TestServer { @Test public void deployServer() { System.out.println("Deploying Server..."); } //Run this if deployServer() is passed. @Test(dependsOnMethods="deployServer") public void deployBackUpServer() { System.out.println("Deploying Backup Server..."); } }
package com.mkyong.testng.examples.dependency; import org.testng.annotations.Test; public class TestDatabase { //belong to "db" group, //Run if all methods from "deploy" group are passed. @Test(groups="db", dependsOnGroups="deploy") public void initDB() { System.out.println("This is initDB()"); } //belong to "db" group, //Run if "initDB" method is passed. @Test(dependsOnMethods = { "initDB" }, groups="db") public void testConnection() { System.out.println("This is testConnection()"); } }
package com.mkyong.testng.examples.dependency; import org.testng.annotations.Test; public class TestApp { //Run if all methods from "deploy" and "db" groups are passed. @Test(dependsOnGroups={"deploy","db"}) public void method1() { System.out.println("This is method 1"); //throw new RuntimeException(); } //Run if method1() is passed. @Test(dependsOnMethods = { "method1" }) public void method2() { System.out.println("This is method 2"); } }
Create a XML file and test them together.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestDependency"> <test name="TestCase1"> <classes> <class name="com.mkyong.testng.examples.dependency.TestApp"> </class> <class name="com.mkyong.testng.examples.dependency.TestDatabase"> </class> <class name="com.mkyong.testng.examples.dependency.TestServer"> </class> </classes> </test> </suite>
Output
Deploying Server...
Deploying Backup Server... This is initDB() This is testConnection() This is method 1 This is method 2 =============================================== TestDependency Total tests run: 6, Failures: 0, Skips: 0 ===============================================
![testng-dependency-test](http://www.mkyong.com/wp-content/uploads/2009/05/testng-dependency-test.png)