TestNG - 依存関係テスト

TestNGでは、依存テストを実装するために dependOnMethods`と dependsOnGroups`を使用します。依存するメソッドが失敗した場合、後続のテストメソッドはすべてスキップされ、失敗はされません。

1. dependOnMethodsの例

簡単な例として、 "method2()"は "method1()"に依存しています。

App.java

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");
    }

}

出力

This is method 1
This is method 2
PASSED: method1
PASSED: method2

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================
  • 1.2 ** `method1()`が失敗した場合、 `method2()`はスキップされます。

App.java

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");
    }

}

出力

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の例

dependsOnMethods`と dependsOnGroups`を混在して使用する方法を示すために、いくつかのテストケースを作成しましょう。自己説明的なコメントを参照してください。

TestServer.java

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...");
    }

}

TestDatabase.java

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()");
    }

}

TestApp.java

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");
    }

}

XMLファイルを作成し、それらを一緒にテストします。

testng.xml

<!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>

出力

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、width = 503、height = 429