このチュートリアルでは、XMLの
@ Parameters`または
@DataProvider`を使ってパラメータを `@ Test`メソッドに渡す方法を説明します。
1. XMLでパラメータを渡す
この例では、ファイルfilenameは
testng.xml`から渡され、
@ Parameters`を介してメソッドに注入されます。
TestParameterXML.java
package com.mkyong.testng.examples.parameter;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class TestParameterXML {
Connection con;
@Test
@Parameters({ "dbconfig", "poolsize" })
public void createConnection(String dbconfig, int poolsize) {
System.out.println("dbconfig : " + dbconfig);
System.out.println("poolsize : " + poolsize);
Properties prop = new Properties();
InputStream input = null;
try {
//get properties file from project classpath
input = getClass().getClassLoader().getResourceAsStream(dbconfig);
prop.load(input);
String drivers = prop.getProperty("jdbc.driver");
String connectionURL = prop.getProperty("jdbc.url");
String username = prop.getProperty("jdbc.username");
String password = prop.getProperty("jdbc.password");
System.out.println("drivers : " + drivers);
System.out.println("connectionURL : " + connectionURL);
System.out.println("username : " + username);
System.out.println("password : " + password);
Class.forName(drivers);
con = DriverManager.getConnection(connectionURL, username, password);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mkyongserver jdbc.username=mkyong jdbc.password=password
testng.xml
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="test-parameter">
<test name="example1">
<parameter name="dbconfig" value="db.properties"/>
<parameter name="poolsize" value="10"/>
<classes>
<class name="com.mkyong.testng.examples.parameter.TestParameterXML"/>
</classes>
</test>
</suite>
出力
dbconfig : db.properties poolsize : 10 drivers : com.mysql.jdbc.Driver connectionURL : jdbc:mysql://localhost:3306/mkyongserver username : mkyong password : password
2. @DataProviderでパラメータを渡す
TestParameterDataProvider.java
package com.mkyong.testng.examples.parameter;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestParameterDataProvider {
@Test(dataProvider = "provideNumbers")
public void test(int number, int expected) {
Assert.assertEquals(number + 10, expected);
}
@DataProvider(name = "provideNumbers")
public Object[][]provideData() {
return new Object[][]{
{ 10, 20 },
{ 100, 110 },
{ 200, 210 }
};
}
}
出力
PASSED: test(10, 20) PASSED: test(100, 110) PASSED: test(200, 210)
-
2.2 **
@ DataProvider`は、
object`パラメータを渡すサポートです。
以下の例は `Map`オブジェクトをパラメータとして渡す方法を示しています。
TestParameterDataProvider.java
package com.mkyong.testng.examples.parameter;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestParameterDataProvider {
@Test(dataProvider = "dbconfig")
public void testConnection(Map<String, String> map) {
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("[Key]: " + entry.getKey()
+ "[Value]: " + entry.getValue());
}
}
@DataProvider(name = "dbconfig")
public Object[][]provideDbConfig() {
Map<String, String> map = readDbConfig();
return new Object[][]{ { map } };
}
public Map<String, String> readDbConfig() {
Properties prop = new Properties();
InputStream input = null;
Map<String, String> map = new HashMap<String, String>();
try {
input = getClass().getClassLoader().getResourceAsStream("db.properties");
prop.load(input);
map.put("jdbc.driver", prop.getProperty("jdbc.driver"));
map.put("jdbc.url", prop.getProperty("jdbc.url"));
map.put("jdbc.username", prop.getProperty("jdbc.username"));
map.put("jdbc.password", prop.getProperty("jdbc.password"));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return map;
}
}
出力
….[Key]: jdbc.url[Value]: jdbc:mysql://localhost:3306/mkyongserver[Key]: jdbc.username[Value]: mkyong[Key]: jdbc.driver[Value]: com.mysql.jdbc.Driver[Key]: jdbc.password[Value]: password
PASSED: testConnection({jdbc.url=jdbc:mysql://localhost:3306/mkyongserver,
jdbc.username=mkyong, jdbc.driver=com.mysql.jdbc.Driver, jdbc.password=password})
=== 3. @DataProviderメソッド この例では、テストメソッド名に応じて異なるパラメータを渡す方法を示します。 TestParameterDataProvider.java
package com.mkyong.testng.examples.parameter;
import java.lang.reflect.Method;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestParameterDataProvider {
@Test(dataProvider = "dataProvider")
public void test1(int number, int expected) {
Assert.assertEquals(number, expected);
}
@Test(dataProvider = "dataProvider")
public void test2(String email, String expected) {
Assert.assertEquals(email, expected);
}
@DataProvider(name = "dataProvider")
public Object[][]provideData(Method method) {
Object[][]result = null;
if (method.getName().equals("test1")) {
result = new Object[][]{
{ 1, 1 }, { 200, 200 }
};
} else if (method.getName().equals("test2")) {
result = new Object[][]{
{ "test@gmail.com", "test@gmail.com" },
{ "test@yahoo.com", "test@yahoo.com" }
};
}
return result;
}
}
出力
PASSED: test1(1, 1)
PASSED: test1(200, 200)
PASSED: test2(”
test@gmail.com
“, ”
test@gmail.com
“)
PASSED: test2(”
test@yahoo.com
“, ”
test@yahoo.com
“)
=== 4. @DataProvider + ITestContext TestNGでは、 `org.testng.ITestContext`を使用して、現在のテストメソッドがどのランタイムパラメータで呼び出されたかを調べることができます。この最後の例では、含まれるグループ名に応じてパラメータを渡す方法を示します。 TestParameterDataProvider.java
package com.mkyong.testng.examples.parameter;
import org.testng.Assert;
import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestParameterDataProvider {
@Test(dataProvider = "dataProvider", groups = {"groupA"})
public void test1(int number) {
Assert.assertEquals(number, 1);
}
@Test(dataProvider = "dataProvider", groups = "groupB")
public void test2(int number) {
Assert.assertEquals(number, 2);
}
@DataProvider(name = "dataProvider")
public Object[][]provideData(ITestContext context) {
Object[][]result = null;
//get test name //System.out.println(context.getName());
for (String group : context.getIncludedGroups()) {
System.out.println("group : " + group);
if ("groupA".equals(group)) {
result = new Object[][]{ { 1 } };
break;
}
}
if (result == null) {
result = new Object[][]{ { 2 } };
}
return result;
}
}
testng.xml
<!DOCTYPE suite SYSTEM “http://beust.com/testng/testng-1.0.dtd” >
<suite name=”test-parameter”>
<test name="example1">
<groups>
<run>
<include name="groupA"/>
</run>
</groups>
<classes>
<class
name="com.mkyong.testng.examples.parameter.TestParameterDataProvider"/>
</classes>
</test>
</suite>
出力
group : groupA
完了しました。 === 参考文献 . http://testng.org/doc/documentation-main.html#parameters-dataproviders[TestNG @DataProvider]。 http://testng.org/javadocs/org/testng/ITestContext.html[TestNG ITestContext JavaDoc]。 link://jdbc/how-to-connect-to-mysql-jdbc-driver-java/[接続先 MySQLとJDBCドライバ] link://tag/parameter-test/[パラメータテスト]link://tag/testng/[testng]