35

基本的に、テストが実行されたばかりのコンソールにログを記録したいティアダウンメソッドがあります。その文字列を取得するにはどうすればよいですか?

クラス名は取得できますが、実行したばかりの実際のメソッドが必要です。

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しかし、私は実際にあるべき魔法を知りません。

4

5 に答える 5

48

@AfterMethodでタイプITestResultのパラメーターを宣言すると、TestNGがそれを挿入します。

@AfterMethod
public void afterMethod(ITestResult result) {
  System.out.println("method name:" + result.getMethod().getMethodName());
}
于 2010-06-01T23:26:16.737 に答える
34

テストを実行する前にメソッド名を取得する場合は、次を使用できます。

import java.lang.reflect.Method;

@BeforeMethod
public void nameBefore(Method method)
{
    System.out.println("Test name: " + method.getName());       
}
于 2012-08-17T10:17:01.227 に答える
8

java.lang.reflect.Methodパラメータを宣言するだけです。

 @BeforeMethod
 public void beforeTestMethod(Method testMethod){
    System.out.println("Before Testmethod: " + testMethod.getName());       
 }

しかし、TestNGを使用すると、さらに多くの注入を行うことができます;)

  • @Beforeメソッドまたは@Testメソッドは、タイプのパラメーターを宣言できますITestContext
  • @AfterMethodメソッドはすべてITestResult、実行されたばかりのテストメソッドの結果を反映するタイプのパラメーターを宣言できます。
  • @Beforeメソッドと@AfterメソッドはすべてXmlTest、現在のタグを含むタイプのパラメーターを宣言できます。
  • @BeforeMethod (および@AfterMethod )は、タイプのパラメーターを宣言できますjava.lang.reflect.Method。このパラメーターは、この@BeforeMethodが終了すると(または@AfterMethodに対して実行されたメソッドの後に)呼び出されるテストメソッドを受け取ります。
  • @BeforeMethodは、タイプのパラメーターを宣言できますObject[]。このパラメーターは、次のテストメソッドに供給されようとしているパラメーターのリストを受け取ります。これは、などのTestNGによって注入されるか、から取得される可能性がありjava.lang.reflect.Methodます@DataProvider
  • @DataProviderは、タイプまたは。のパラメーターを宣言できます。後者のパラメーターは、呼び出されようとしているテストメソッドを受け取ります。ITestContextjava.lang.reflect.Method
于 2016-02-29T11:45:46.777 に答える
2

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)をコンソールに出力します。テストが実行されるたびに実行されます。

プログラムでtestSuiteを生成している場合は、@Listeners({MethodListener.class})各テストクラスを追加する代わりに、次のようにリスナーを追加できます。

    List<String> listeners = new ArrayList<String>();
    listeners.add(MethodListener.class.getName());
    testSuite.setListeners(listeners);
于 2017-02-07T07:27:14.727 に答える
1

私自身のプロジェクトでは、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);
    }
};
于 2019-01-24T04:49:37.123 に答える