Mockitoを使用してJavaでレコーダーをシミュレートする

はい、正しく読みました:Javaでレコーダーをシミュレートしています。「このメッセージを最初に表示したとき、奇妙に聞こえるかもしれませんが、特別な場合には、アプリケーションの特定の部分で単体テストが実行されます唯一の方法は、特定のメッセージが記録されているかどうかを確認することです。

たとえば、アプリケーションが他のいくつかのWebServicesに対して非同期呼び出しを行う必要があるとします。その後、この呼び出しを行うための別のスレッドがあります。メインスレッドの場合、サービスの呼び出しが成功するかどうかは関係ありません。応答を待機しないためです(そうしないと、同期になりますよね?)。アプリケーションのこの部分がサービスを呼び出すだけで、呼び出しが成功したかどうかのみを記録するとします(言うまでもなく、この場合、状況がいつ発生しないかを知るための監視ツールが必要です)。生産は良好です。

次に、これらのシナリオをカバーするJUnitテストケースを作成する必要があります。Google検索を使用すると、動的シミュレーションが使用される場合がありますが、すでにMochitoを使用していて、何らかの理由で、Mochitoを必要なだけ使用したいと想像してください。

この記事では、あなたがすでにMochitoに精通していることを前提としているので、「アナログレコーダー」セクションに焦点を当てます。インターネットでチュートリアルを学びたいなら、もちとをたくさん見つけることができます。

わかりました。これを実現する1つの方法は、ロガーオブジェクトのアペンダーをシミュレートし、MochitoのArgumentCaptorを使用してテストケースのすべてのログイベントをキャプチャすることです。

    @Mock
    private Appender mockedAppender;

    @Captor
    private ArgumentCaptor<LoggingEvent> loggingEventCaptor;

次に、テストを実行する前に、アペンダーがルートレコーダーに追加されていることを確認する必要があります。

    @Before
    public void setup() {
        Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
        root.addAppender(mockedAppender);
        root.setLevel(Level.INFO);
    }

その後、テストクラスを呼び出して、記録されたメッセージをアサートできます。

    @Test
    public void testSuccessCall() throws Exception {
        // mock all required response objects in here

        [...]

        // this is the call to the service being tested
        myService.execute(createRequestForSuccessResponse());

        // check how many times the ArgumentCaptor was called
        verify(mockAppender, times(1)).doAppend(loggingEventCaptor.capture());
        // get the reference to the LoggingEvent you want to inspect
        LoggingEvent loggingEvent = loggingEventCaptor.getAllValues().get(0);
        // check the logged message
        assertEquals("Webservice was successfully called", loggingEvent.getMessage());
        // check the log level
        assertEquals(Level.INFO, loggingEvent.getLevel());
    }

この特別な状況に直面したときに、これが最終的に役立つことを願っています!;-)

から:https://dev.to//claudiohigashi/mocking-logger-in-java-with-mockito-51k8

元の記事を公開0件 ・いい ね0件 404回アクセス

おすすめ

転載: blog.csdn.net/cunxiedian8614/article/details/105690128