基本的に、テストが実行されたばかりのコンソールにログを記録するティアダウンメソッドがあります。その文字列を取得するにはどうすればよいですか?
クラス名は取得できますが、実行されたばかりの実際のメソッドが必要です。
public class TestSomething {
@AfterMethod
public void tearDown() {
System.out.println("The test that just ran was: " + getTestThatJustRanMethodName());
}
@Test
public void testCase() {
assertTrue(1 == 1);
}
}
...画面に出力する必要があります:「実行したテストはtestCaseでした」
しかし、私はgetTestThatJustRanMethodName
が実際に持つべき魔法を知りません。
@AfterMethodでITestResult型のパラメーターを宣言すると、TestNGがそれを注入します。
@AfterMethod
public void afterMethod(ITestResult result) {
System.out.println("method name:" + result.getMethod().getMethodName());
}
メソッド名を取得したい場合 前 テストが実行されると、以下を使用できます。
import Java.lang.reflect.Method;
@BeforeMethod
public void nameBefore(Method method)
{
System.out.println("Test name: " + method.getName());
}
Java.lang.reflect.Method
パラメータを宣言するだけです。
@BeforeMethod
public void beforeTestMethod(Method testMethod){
System.out.println("Before Testmethod: " + testMethod.getName());
}
しかし、TestNGではinjectより多くのことができます;)
- @ Beforeメソッドまたは@ Testメソッドは、タイプ
ITestContext
のパラメーターを宣言できます。- すべての@ AfterMethodメソッドは、タイプ
ITestResult
のパラメーターを宣言できます。これは、実行されたばかりのテストメソッドの結果を反映します。- すべての@ Beforeおよび@ Afterメソッドは、現在のタグを含むタイプ
XmlTest
のパラメーターを宣言できます。- @ BeforeMethod(および@ AfterMethod)は、タイプ
Java.lang.reflect.Method
のパラメーターを宣言できます。このパラメーターは、この@BeforeMethodが終了すると(またはメソッドが@AfterMethodを実行した後に)呼び出されるテストメソッドを受け取ります。- @ BeforeMethodは、タイプ
Object[]
のパラメーターを宣言できます。このパラメーターは、次のテストメソッドに渡されるパラメーターのリストを受け取ります。これは、Java.lang.reflect.Method
などのTestNGによって注入されるか、または@DataProvider
。- @ DataProviderは、タイプ
ITestContext
またはJava.lang.reflect.Method
のパラメーターを宣言できます。後者のパラメーターは、呼び出されようとしているテストメソッドを受け取ります。
私自身のプロジェクトでは、JUnit @Rule
のおかげでこのデータにアクセスしています。
String testName;
String className;
@Rule
public TestWatcher watcher = new TestWatcher() {
public void starting(Description description) {
testName = description.getMethodName();
className = description.getClassName();
logger.info("Starting test " + testName + " in class " + className);
}
};
TestNGがこれをサポートするもう1つの方法( Cedricの回答 ほど単純ではありません)は リスナーを登録する です。
_@Listeners({MethodListener.class})
public class ListenerTest {
@Test
public void someTest() {
}
}
_
リスナーは次のようになります。
_public class MethodListener implements IInvokedMethodListener {
@Override
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
}
@Override
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
System.out.println(method.getTestMethod().getMethodName());
}
}
_
この特定のリスナーは、メソッド名(つまりsomeTest
)をコンソールに出力します。 every実行されたテストの後に実行されます。
プログラムでtestSuiteを生成している場合は、各テストクラスに@Listeners({MethodListener.class})
を追加する代わりに、次のようにリスナーを追加できます。
_ List<String> listeners = new ArrayList<String>();
listeners.add(MethodListener.class.getName());
testSuite.setListeners(listeners);
_