ABOUT ME

포소니는 나의 하루이자 누군가의 공감입니다. 조용히 머물러도 좋고, 가볍게 이야기를 남겨도 좋아요. 당신의 일상도, 이곳에 스며들길 바랍니다.

Today
Yesterday
Total
  • Flux and Mono
    Tech/SpringBoot 2020. 7. 14. 18:52
    반응형

    Spring Reactive 를 위해 flux and Mono 에 대해 간단하게 테스트 해보도록 하고 기록으로 남기도록 한다.

    private final static String[] countries = new String[]{"Korea","China","America","Canada"};
      private final static Flux<String> countiesFlux = Flux.just("Korea","China","America","Canada");
    
      /**
       * create flux
       */
      @Test
      public void createFluxWithJustAndVerify(){
        //subscribe 를 사용하여 구독 및 출력 하도록 한다.
        countiesFlux.subscribe(s->{
          System.out.println(s);
        });
    
        //subscription 데이터 개수가 4개인지 검증
        StepVerifier.create(countiesFlux)
            .expectNextCount(4)
            .verifyComplete();
    
        //구독시 순차적으로 구독 하기 때문에 생성 순서대로 expect value 를 설정 하도록 해야한다.
        StepVerifier.create(countiesFlux)
            .expectNext("Korea")
            .expectNext("China")
            .expectNext("America")
            .expectNext("Canada")
            .verifyComplete();
      }
    
      /**
       * 배열로부터 flux 데이터 생성.
       */
      @Test
      public void createFluxFromArrayAndVerify(){
        // 배열 데이터로부터 flux 생성
        Flux<String> flux = Flux.fromArray(countries);
        //구독 및 출력
        flux.subscribe(System.out::println);
    
        //구독할 데이터의 개수 검증
        StepVerifier.create(flux)
            .expectNextCount(countries.length)
            .verifyComplete();
      }
    
      /**
       * flux 에 특정 단어들이 포함되어있는지 확인.
       */
      @Test
      public void containTest(){
        Mono<Boolean> hasAllKorean = countiesFlux.all(c -> c.contains("a"));
        Mono<Boolean> hasAnyKorean = countiesFlux.any(c -> c.contains("a"));
        StepVerifier.create(hasAllKorean)
            .expectNext(true)
            .verifyComplete();
    
        StepVerifier.create(hasAnyKorean)
            .expectNext(true)
            .verifyComplete();
      }
    
      /**
       * filter Test
       */
      @Test
      public void filterTest(){
        Flux<String> filteredCountries = countiesFlux.filter(c -> !c.equalsIgnoreCase("China"));
        StepVerifier.create(filteredCountries)
            .expectNext("Korea","America","Canada")
            .verifyComplete();
      }
    
      /**
       * distinct Test
       */
      @Test
      public void distinctTest(){
        Flux<String> flux = Flux.just("Korea","Korea","China","America","Canada");
    
        Flux<String> distinctCountries = flux.distinct();
        StepVerifier.create(distinctCountries)
            .expectNext("Korea","China","America","Canada")
            .verifyComplete();
      }
    반응형
Designed by Tistory.