23-08-23 TIL

more·2023년 8월 23일
0

문제

  • 동시성 제어 강의를 복습 도중 Cannot invoke "com.example.stock.repository.Stock Repository.saveAndFlush(Object)" because "this.stockRepository" is null 이라는 에러가 발생하였다.

시도

  • 테스트 과정에서 발생한 에러였고, 해당 에러의 원인이 되는 코드를 살펴보니 아래와 같이 beforeEach로 테스트 전에 레파지토리에서 saveAndFlush를 하여서 Stock 한개를 저장하고 flush 해주는 코드였다.
    @BeforeEach
        public void before () {
            stockRepository.saveAndFlush(new Stock(1L, 100L));
        }
  • 무엇이 문제인지 판단이 되지 않아서
    1. stock을 아예 만들고 할당해줌
      @BeforeEach
          public void before () {
              Stock stock = new Stock();
              stock = stockRepository.saveAndFlush(new Stock(1L, 100L));
          }
      -> 아님
    2. Repository와 RedissonLockStockFacade 파일의 문제점을 찾아봄
      -> 기존에 구현해서 실행되었던 파일들과 비교
      -> 딱히 문제되는 부분은 없음
    3. Test 딴에서 무엇인가 문제가 있을 것으로 예상
      -> RedissonLockStockFacadeTest.java를 기존에 있던 테스트 파일들과 비교

해결

  • @SpringBootTest를 테스트 상단에 붙여주지 않았다.
    @SpringBootTest는 통합 테스트를 제공하는 기본적인 어노테이션이고 하나의 통합된 테스트로 수행할 때 사용한다. 해당 테스트를 실행할 때에 기본 설정들을 @Autowire 를 붙여주어서 아예 빈으로 등록했었는데 @SpringBootTest를 붙여주지 않아서 등록되지 않았던 것으로 보인다.
profile
조금 더

0개의 댓글