2017-02-08 4 views
0

これはjunitとLogbackの問題だと思います。私のプロジェクトでは、ロギングはslf4jによって行われます。ロギング実装はLogbackです。Junitでは、意図的にスローされ、すでにログに記録されている予期される例外を印刷しないようにするにはどうすればよいですか?

だから私は、クラスを持っている:

@Component 
@Slf4j 
public class A { 
    private final ObjectMapper objectMapper = new ObjectMapper(); 

    private static final String DEFAULT_REPLY = "just continue..."; 

    public String doSomething(Object value) { 
     try { 
      return objectMapper.methodAbc(value); 
     } catch (JPException e) { 
      log.error("Exception while processing value", e); 
      return DEFAULT_REPLY; 
     } 
    } 
} 

とそのテストクラス

@RunWith(MockitoJUnitRunner.class) 
public class ATest { 
    @Before 
    public void init() { 
     processor = new A(); 
    } 

    @Test 
    public void test() throws Exception { 
     ObjectMapper mockMapper = mock(ObjectMapper.class); 
     JP mockJp = mock(JP.class); 
     Exception thrownException = new JPException(mockJp, null); 

     when(mockMapper.methodAbc(any())).thenThrow(thrownException); 

     String result = processor.doSomething("abc"); 

     assertTrue(result.equals("just continue...")); 
    } 
} 

私は、テスト自体に問題ありません。見ての通り、意図的にスローされているので、テストではJPExceptionがログに出力されます。

ログでデバッグするときに、このような種類の予想される例外が多すぎます。ログからそれらを削除する方法があるのでしょうか?もちろん、期待していない他の例外も印刷します。

+0

logging implとして何を使用していますか? – davidxxx

+0

@ davidxxx、Logbackを使用しています。 – mumofuronghua

答えて

-1

はこれを試してみてください:

  1. ログのモックを作成します。
  2. テスト中のクラスにモックを注入します。
  3. 疑似ログオブジェクトのエラーメソッドが呼び出されたと主張します。
+0

質問を少し編集しました。質問をより明確にするために、私は何かをテストするのに何の問題もありません。テスト自体は大丈夫です。ちょうど私は、ログに出力される予想される例外「JPException」を見たくありません。 – mumofuronghua

+0

上記の手順1と2を実行すると、ログファイルに例外が記録されなくなります。 – DwB

0

Logbackには、特定のロジックに基づいてフィルタと評価をサポートする機能があります。あなたが探して何ができるか

このリンクはおそらくです:

https://logback.qos.ch/manual/layouts.html#Evaluators

あなたはそれがどんなexceptioのインスタンスである場合に特定のアクションを行うのですか、しないように、あなたのlogbackを設定することができます - あなたのケースでJPException

+0

リンクをありがとう。それは非常に便利で、私はそれを読むでしょう。問題は、この種の例外が 'IOException'、' IllegalArgumentException'、 'JPException'などの異なる型にあることです。 'filters'と' Evaluators'がやり方であるなら、非常に大きなlogback.xmlファイルがそこにあると思います。私たちが意図的に 'thenThrow'を使って例外をスローするときのように、junit側からの方法はありますか?何かはログバック側で行うことができますか? – mumofuronghua

+0

JUnitのメソッドのアノテーション '@Test(expected = JPException.class)'が役立つかどうかは分かりませんが、探しているものを教えてください。この場合、例外がスローされなかった場合は、java.lang.AssertionError:Expected Exception ..... JPException'というエラーが発生します。 –

+0

これは私の場合は動作しません。例外がテストメソッドの外側にキャッチされ、テストにJPExceptionがスローされないためです。しかし、これらの例外はテストメソッドの内部でスローされます。とにかくありがとう;) – mumofuronghua

関連する問題