[Spring] AssertionFailedError : Actual Null

Jung In Lee·2024년 11월 16일
0

Spring

목록 보기
1/1

서비스 테스트했을때 발생한 문제다.

  • ProductServiceTest.class
@Test
    @DisplayName("제품 등록: 회원만")
    void addProductTest(){
  
        given(memberRepository.getReferenceById(sellerId)).willReturn(member);
        given(productRepository.save(any(Product.class))).willReturn(product);

        // when
        Long actual = productService.addProduct(name,price,quantity,sellerId);

        // then
        assertThat(actual).isEqualTo(product.getId());
    }
  • ProductService.addProduct
@Transactional
    public Long addProduct(String name, Price price, Quantity quantity, Long sellerId) {
        Member seller = memberRepository.getReferenceById(sellerId);

        Product product = new Product(seller,name,price,quantity);

        productRepository.save(product);

        return product.getId();
    }
  • 다음과같은 상황에서 테스트를 실행하면 이런 에러가 뜬다
org.opentest4j.AssertionFailedError: 
expected: 1L
 but was: null
Expected :1L
Actual   :null
  • 이는 stub도 잘되어있고 뭐가 문제일까하며 찾아봤는데, 객체가 저장되었는데 null값이 반환된다면 id값이 없는게 문제였던걸로 가정되었다.
	@Id
    @Column(name = "product_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
  • @GeneratedValue는 테스트코드에서 실행되지않는다. 이는 Mock 객체는 실제 데이터베이스와 상호작용없이 동작하기 때문이다.
  • 나는 이전에 ProductRepository를 @Mock로 등록해주었고, 실제 데이터베이스에 접근하지않기때문에 @GeneratedValue가 실행되지않는것이다.
Product product = new Product(1L, seller,name,price,quantity);
  • 따라서 그냥 테스트용으로 1L을 대입해주었다. 일치
profile
Spring Backend Developer

0개의 댓글