응답을 보내지 않고 비동기 vertx 이벤트 버스 핸들러를 테스트하는 방법

안톤 이빈 스키

Java vertx로 작성된 두 개의 마이크로 서비스가 있습니다. 이벤트 버스를 통해 통신합니다. 첫 번째는 메시지를 보내고 두 번째는 메시지를받습니다.

첫 번째 아이디어 : 단위 테스트에서 Vertx eventbus 메시지에만 응답하십시오.

메시지가 오류없이 처리되고 있는지 테스트하고 싶으므로 응답을 확인하는 두 번째 마이크로 서비스에 단위 테스트를 작성합니다.

eventbus.send("address", message, reply -> {
    if (reply.succeeded()) {
        context.async().complete();
    } else {
        context.fail();
    }});

이제 소비자에게 답장을 보내야하는데 테스트에서만하고 싶기 때문에 프로덕션에서 답장을 보낼 필요가 없습니다. 프로덕션에서 응답을 보내기 위해 CPU와 네트워크를 사용하고 싶지 않습니다. 그래서 내가 찾고있는 것은 다음과 같습니다.

vertx.eventBus().consumer("address", handler -> {
    Boolean success = methodMayFail();
    if ( MY_CONTEXT_IS_TEST || HANDLER_IS_LOCAL_AS_I_ONLY_SENT_LOCAL_MESSAGES_FROM_TEST) {
        success ? handler.reply("ok") : handler.fail();
    }
});

두 번째 생각은 뒤에 오는 cdelmas 주석 과에 내 자신의 대답

안톤 이빈 스키

응답없이 비동기 이벤트 버스 핸들러를 테스트하려면 비즈니스 로직을 서비스로 추출하고 테스트 케이스를 두 개로 분할해야합니다. 첫 번째는 메시지 전달 용이고 두 번째는 비즈니스 로직 용입니다.

ConsumerVerticle은 다음과 같습니다.

class ConsumerVerticle extends AbstractVerticle {
    // this service is injected somehow, for example as constructor parameter
    private MyService service;
    ...
    public void start() {
        vertx.eventBus().consumer("address", handler -> {
            service.methodMayFail();
        });
    }
}

비동기 테스트 methodMayFail()에서 비동기를 보유 할 재정의 된 메서드로 서비스의 모의를 구현 합니다.

class MockService extends MyService() {
    private Async async;
    public MockService(Async async) {
        this.async = async;
    }
    @Override public void methodMayFail() {
        async.complete()
    }
}

그런 다음 모의 서비스를 verticle에 삽입합니다.

MockService service = new MockService(context.async()); 
ConsumerVerticle consumerVerticle = new ConsumerVerticle(service);
...
eventbus.send("address", message)

다른 클래스에서 어딘가에 MyServiceTest테스트의 구현 methodMayFail().

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Apache Felix Event Admin 구현을 통해 내 이벤트 핸들러를 블랙리스트하지 않는 방법

분류에서Dev

Timeout을 사용하지 않고 angularjs 컨트롤러 비동기 동작을 테스트하는 방법

분류에서Dev

Laravel에서 문자를 이스케이프하지 않고 서버에서 자바 스크립트 응답을 보내는 방법

분류에서Dev

원하는 기능을 수행하지 않는 버튼 이벤트 핸들러를 확인하십시오.

분류에서Dev

Symfony2 SwiftMailer-서버 응답을 기다리지 않고 이메일을 보내는 방법

분류에서Dev

서버를 만들지 않고 클라이언트 앱을 테스트하는 방법은 무엇입니까?

분류에서Dev

jest에서 지연된 이벤트 핸들러를 테스트하는 방법은 무엇입니까?

분류에서Dev

JQuery.ajax는 C # 서버의 응답을 기다리지 않고 로컬 호스트에서 테스트하는 오류 함수를 호출합니다.

분류에서Dev

이벤트 버블 링을 방지하는 컨테이너의 요소에 대해 Reactjs 이벤트 핸들러가 트리거되지 않음

분류에서Dev

기기를 루팅하지 않고 andrioid 앱을 테스트하는 방법

분류에서Dev

전단지 컨텍스트 메뉴 이벤트를 잡기 위해 이벤트 핸들러를 추가하는 방법은 무엇입니까?

분류에서Dev

사람들이 내 노드 / 익스프레스 사이트를 침투 테스트하는 URL에 응답을 보내지 않아도됩니까?

분류에서Dev

프런트 엔드를 수동으로 테스트하고 서버 응답간에 전환하는 방법,

분류에서Dev

비동기 함수 값을 이벤트 핸들러에 전달하는 방법

분류에서Dev

이벤트 핸들러 내에서 React useState 후크를 사용하여 버튼을 비활성화하는 방법

분류에서Dev

이벤트 핸들러의 결과를 테스트하는 방법

분류에서Dev

내 응답이 NULL 인 동안 경고 / 토스트를 표시하는 방법

분류에서Dev

핸들 매개 변수를 전달하지 않고 Delphi로 DLL 프로젝트에서 호스트 응용 프로그램 핸들을 얻는 방법

분류에서Dev

보내기 전에 부품을 스캔하지 않고 멀티 파트 / 바이트 범위 응답 생성

분류에서Dev

이벤트 기반 프로그래밍, 요청을 보낸 인스턴스에 응답하는 방법

분류에서Dev

텍스트 편집기를 사용하지 않고 파일 내용을 보는 방법

분류에서Dev

이벤트 핸들러에서 기능을 중지하는 방법

분류에서Dev

서버가 이미지를 응답으로 보내고 서비스 전에 이름을 바꿉니다.-Symfony 2

분류에서Dev

컨트롤러를 중지하고 서비스 응답을 기다립니다.

분류에서Dev

커서를 이동하지 않고 구문 조건을 테스트하는 방법은 무엇입니까?

분류에서Dev

Powershell : 이벤트 핸들러가 for 루프 내부에있을 때 체크 박스 변경 이벤트가 유효한 결과를 제공하지 않습니다.

분류에서Dev

비동기 인턴 테스트의 비동기 xhr 핸들러 내부에서 assert (false)가 테스트에 실패하지 않습니다.

분류에서Dev

응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

분류에서Dev

응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Apache Felix Event Admin 구현을 통해 내 이벤트 핸들러를 블랙리스트하지 않는 방법

  2. 2

    Timeout을 사용하지 않고 angularjs 컨트롤러 비동기 동작을 테스트하는 방법

  3. 3

    Laravel에서 문자를 이스케이프하지 않고 서버에서 자바 스크립트 응답을 보내는 방법

  4. 4

    원하는 기능을 수행하지 않는 버튼 이벤트 핸들러를 확인하십시오.

  5. 5

    Symfony2 SwiftMailer-서버 응답을 기다리지 않고 이메일을 보내는 방법

  6. 6

    서버를 만들지 않고 클라이언트 앱을 테스트하는 방법은 무엇입니까?

  7. 7

    jest에서 지연된 이벤트 핸들러를 테스트하는 방법은 무엇입니까?

  8. 8

    JQuery.ajax는 C # 서버의 응답을 기다리지 않고 로컬 호스트에서 테스트하는 오류 함수를 호출합니다.

  9. 9

    이벤트 버블 링을 방지하는 컨테이너의 요소에 대해 Reactjs 이벤트 핸들러가 트리거되지 않음

  10. 10

    기기를 루팅하지 않고 andrioid 앱을 테스트하는 방법

  11. 11

    전단지 컨텍스트 메뉴 이벤트를 잡기 위해 이벤트 핸들러를 추가하는 방법은 무엇입니까?

  12. 12

    사람들이 내 노드 / 익스프레스 사이트를 침투 테스트하는 URL에 응답을 보내지 않아도됩니까?

  13. 13

    프런트 엔드를 수동으로 테스트하고 서버 응답간에 전환하는 방법,

  14. 14

    비동기 함수 값을 이벤트 핸들러에 전달하는 방법

  15. 15

    이벤트 핸들러 내에서 React useState 후크를 사용하여 버튼을 비활성화하는 방법

  16. 16

    이벤트 핸들러의 결과를 테스트하는 방법

  17. 17

    내 응답이 NULL 인 동안 경고 / 토스트를 표시하는 방법

  18. 18

    핸들 매개 변수를 전달하지 않고 Delphi로 DLL 프로젝트에서 호스트 응용 프로그램 핸들을 얻는 방법

  19. 19

    보내기 전에 부품을 스캔하지 않고 멀티 파트 / 바이트 범위 응답 생성

  20. 20

    이벤트 기반 프로그래밍, 요청을 보낸 인스턴스에 응답하는 방법

  21. 21

    텍스트 편집기를 사용하지 않고 파일 내용을 보는 방법

  22. 22

    이벤트 핸들러에서 기능을 중지하는 방법

  23. 23

    서버가 이미지를 응답으로 보내고 서비스 전에 이름을 바꿉니다.-Symfony 2

  24. 24

    컨트롤러를 중지하고 서비스 응답을 기다립니다.

  25. 25

    커서를 이동하지 않고 구문 조건을 테스트하는 방법은 무엇입니까?

  26. 26

    Powershell : 이벤트 핸들러가 for 루프 내부에있을 때 체크 박스 변경 이벤트가 유효한 결과를 제공하지 않습니다.

  27. 27

    비동기 인턴 테스트의 비동기 xhr 핸들러 내부에서 assert (false)가 테스트에 실패하지 않습니다.

  28. 28

    응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

  29. 29

    응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

뜨겁다태그

보관