2012-09-18 6 views
7

TestNGテストメソッドから例外がスローされた後に実行されるアスペクトがあります。私は私のaspectjメソッドにTestメソッド名を取得したいと思います。Javaで例外をスローしたメソッド名を取得する方法

これについてのご意見はありますか?あなたから直接例外をスローする必要がありますが、

thisJoinPoint.getSignature().getName() 

アスペクト比::

pointcut publicCall(): call(public * *(..)); 

after() throwing (AssertionError e): publicCall() { 
    logger.debug("Assertion Error thrown"); 
    System.out.println("Threw an exception: " + e); 
} 

テスト:あなたが使用することができます

@Test 

public void testScenarioOne(){ 
    logger.debug("From Scenario One Test"); 
    Assert.assertEquals(true, false); 
} 

答えて

4

pointcut publicMethod(): execution(public * *(..)); 

after() throwing (AssertionError e): publicMethod() { 
    System.out.println(thisJoinPointStaticPart.getSignature()); 
} 

編集:たぶん具体的@Test注釈付きメソッド遮るようにしてもきれいになります:

import org.testng.annotations; 

public aspect TestExceptionInterceptor { 
    pointcut testMethod(): execution(@Test * *(..)); 

    after() throwing (AssertionError e): testMethod() { 
     System.out.println(thisJoinPointStaticPart.getSignature()); 
    } 
} 
+0

ありがとうございます!ポイントカットのタイプを呼び出しから実行に変えることはやりました。 (2番目のスニペットはコンパイルされませんでした)。 – rookie007r

+0

私が覚えている限り、私はちょうどうまくコンパイルされた私のエディタから2番目のスニペットをコピー&ペーストしました。あなたはもっと具体的になりますか?どのエラーメッセージが表示されますか? – kriegaex

+0

あなたが持っているエラーは、pointcut testMethod()のような完全修飾パッケージを指定する必要があるためです:実行(@ org.testng.annotations.Test * *(..)); –

2

の下に私のコードサンプルを見つけてください。あなたのテスト方法。 Assert.equals()はテストメソッドではなく例外をスローしています。あなたがexecutioncallからあなたのポイントカットの種類を変更する必要が

+1

私はthisStaticJoinPointはと思いますまた働く。 –

+1

まあ...ありがとう!それは私に "assertEquels"メソッドを与えている。私はTestメソッド(すなわち、testScenarioOne)が必要です。 – rookie007r

関連する問題