私は同じ問題に遭遇しました。以下は私の解決策です。私の場合、テストメソッドが失敗したパラメーターを確認するには、パラメーターを sysout にダンプするだけで十分でした。テスト後にパラメーターを手元に置く必要がある場合は、(うまくいけば:))このソリューションを簡単に拡張できます。
では、いざ…
toString()
パラメータをいくつかのコンポジットにラップし、メソッド
をオーバーライドしてください。
public interface CommonTestParameter {
String getStuff();
Object getMoreStuff();
}
public class TestParameterImpl implements CommonTestParameter {
private final String stuff;
private final Object moreStuff;
public TestParameterImpl(String aStuff, Object aMoreStuff){
this.stuff = aStuff;
this.moreStuff = aMoreStuff;
}
@Override
public String getStuff(){
return this.stuff;
}
@Override
public Object getMoreStuff(){
return this.moreStuff;
}
@Override
public String toString(){
return "stuff = \"" + this.stuff + "\", moreStuff = \"" + this.moreStuff.toString() + "\"";
}
}
テスト クラスの抽象的な親を作成します。
public abstract class AbstractTestParent implements ITest {
private String testName = "";
// This method actually is what provides you with the functionality of renaming
// your tests for the standard testNG logger
@Override
public String getTestName(){
return this.testName;
}
protected abstract CommonTestParameter getTestParameter();
@BeforeMethod
public void beforeMethod(Method aMethod) {
this.testName = aMethod.getName() + "[" + getTestParameter().toString() + "]";
}
}
最後に、テスト クラスを作成します。
public class TestClassImpl extends CommonTestParent {
private CommonTestParameter testParam;
@Override
protected CommonTestParameter getTestParameter(){
return this.testParam;
}
@DataProvider(name = "awesomeDataProvider")
public static Iterator<Object[]> provideData(){
List<Object[]> dataList = new LinkedList<Object[]>();
dataList.add(new TestParameterImpl("Stuff1!", "More stuff1!"));
dataList.add(new TestParameterImpl("Stuff2!", "More stuff2!"));
return dataList.iterator();
}
@Factory(dataProvider = "awesomeDataProvider")
public TestClassImpl(CommonTestParameter aTestParam){
this.testParam = aTestParam;
}
@Test
public void testStuff(){
System.out.println(this.testParam.getStuff());
}
@Test
public void testMoreStuff(){
System.out.println(this.testParam.getMoreStuff().toString());
}
}
これらのテストを実行するたびに、標準形式のコンソール出力の代わりに
PASSED: testStuff
PASSED: testStuff
PASSED: testMoreStuff
PASSED: testMoreStuff
メソッドをオーバーライドして指定した形式で、テストメソッドを呼び出した引数が実際に表示されますtoString()
。
PASSED: testStuff[stuff = "Stuff1!", moreStuff = "More stuff1!"]
PASSED: testStuff[stuff = "Stuff2!", moreStuff = "More stuff!"]
PASSED: testMoreStuff[stuff = "Stuff1!", moreStuff = "More stuff1!"]
PASSED: testMoreStuff[stuff = "Stuff2!", moreStuff = "More stuff2!"]
実際にパラメーターをさらに処理する必要がある場合は、この概念を反復処理してMap<String, List<CommonTestParameter>>
(キーはメソッド名を表し、値はメソッドを呼び出したすべてのパラメーターを表す) に格納してから、何らかの@AfterSuite
メソッドで解析できます。
これが役に立てば幸いです、ジャネック。