2017-03-17 1 views
-1

@Testメソッドの上に@DataProviderがデータを取得するファイルの名前を含むアノテーションがあります。 @BeforeMethodでそのファイルを初期化しようとしましたが、原因が@BeforeMethodで成功しませんでした。アフター @DataProvider。@BeforeMethodの後に実行する@DataProviderを管理することはできます

@BeforeMethodでFileを初期化する必要がある理由は、そのメソッドから@Testメソッドが実行されていることを知り、ファイル名でその注釈をプルできることです。また、すべての@Testメソッドを実行する前に実行します。どのように私はこのことを作ることができますか?

String fileName; 

@MyAnnotation(fileName="abc.txt") 
@Test(dataProvider = "getData") 
public void test(DataFromFile data) { 
    ...showData(); 
} 

@BeforeMethod 
public void beforeMethod(Method invokingMethod) { 
    fileName ... = invokingMethod.getAnnotation(MyAnnotation.class).fileName(); 
} 

@DataProvider 
public Object[][] getData() { 
    ... initialize new File(fileName); 
    ... 
} 
+0

このクラスには、いくつの '@MyAnnotation(fileName =" abc.txt ")'注釈付きメソッドがありますか? –

+0

1。どのように問題に影響を与えますか? – milosdju

答えて

1

あなたはおそらく、TestNGのはあなたに@DataProviderアノテーション付きメソッドが呼び出されてされている実際の「メソッド」を注入するの提供を与えますので、あなたが直接できるはずです。この

package com.rationaleemotions.stackoverflow; 

import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 

import java.lang.annotation.Retention; 
import java.lang.annotation.Target; 
import java.lang.reflect.Method; 

import static java.lang.annotation.ElementType.METHOD; 

public class DataProviderGames { 
    @Test(dataProvider = "getData") 
    @MyAnnotation(fileName = "input.txt") 
    public void test(String data) { 
     System.err.println("Test data :" + data); 
    } 

    @Test(dataProvider = "getData") 
    @MyAnnotation(fileName = "input.csv") 
    public void anotherTest(String data) { 
     System.err.println("Test data :" + data); 
    } 

    @DataProvider 
    public Object[][] getData(Method method) { 
     MyAnnotation annotation = method.getAnnotation(MyAnnotation.class); 
     return new Object[][]{ 
       {annotation.fileName()} 
     }; 
    } 

    @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) 
    @Target({METHOD}) 
    @interface MyAnnotation { 
     String fileName() default ""; 
    } 
} 

ような何かを行う必要があります反射を使用してメソッドの注釈を照会し、その注釈を使用してファイル名を取得します。

関連する問題