# @MockBean

6개의 포스트
post-thumbnail

MockBean(파일업로드)

1. 개요 과제로 Post를 만드는과제가 있었다. 파일 업로드를 해야 하고, 이것을 테스트 하는 코드를 작성하였다. 위와 같은 테스트 코드를 작성했다. file.createNewFile(); 을 해야 했던 이유는, 파일이 없으면 NPE 가 발생했기 때문이다. 하지만 동생의 코드 리뷰를 받고서는 테스트코드는 어떠한 상황에서도 돌아가야 한다는 말을 들었다. 즉, 위의 테스트 코드는 컴퓨터의 용량이 모두 찼을 경우에는 돌아가지 않는다는 이야기였다. 그렇다면 가상으로 파일을 만들고, 저장해야 하는 코드가 필요했다. 열심히 찾아서 File을 Mocking 하는 방법을 찾아 봤지만, 똑같이 NPE가 발생했다. 그럴 수밖에 없는 게 Mock의 기본은 빈 객체를 반환하는 것이기 때문이다. 동생에게 다시 물어봤고

2023년 5월 31일
·
0개의 댓글
·

Test코드에 관하여 : @DataJpaTest와 @SpringBootTest 의 차이? (Feat. Spock+그루비)

처음 테스트코드를 Spock를 이용하여 작성하려고 할 땐, 왜 @Mock객체를 스프링부트가 인식할 수 없는지 알지 못했다. ⭐️ [이전블로그보기]Spock 테스트프레임워크를 사용할 때 @Mock import안되는 문제 간단히 요약하자면 JPA Repository 인터페이스는 스프링 데이터 JPA에 의해 동적으로 구현되기 때문에 단순히 @Mock 어노테이션으로는 모킹할 수 없다. 따라서 추가적인 작업이 필요했는데 그것은 @SpringBootTest 어노테이션을 사용하여 테스트 클래스에서 스프링 컨텍스트를

2023년 5월 24일
·
0개의 댓글
·
post-thumbnail

테스트 코드 작성하기

Given-When-Then Given-When-Then 패턴은 테스트 코드를 표현하는 방식 중 하나입니다. 단어에서 유추할 수 있듯이 다음과 같은 단계를 설정해서 각 단계의 목적에 맞게 코드를 작성합니다. Given 테스트를 수행하기 전에 테스트에 필요한 환경을 설정하는 단계입니다. 테스트에 필요한 변수를 정의하거나 Mock객체를 통해 특정 상황에 대한 행동을 정의합니다. When 테스트의 목적을 보여주는 단계입니다. 실제 테스트 코드가 포함되며, 테스트를 통한 결괏값을 가져오게 됩니다. Then 테스트의 결과를 검증하는 단계입니다. 일반적으로 When 단계에서 나온 결괏값을 검증하는 작업을 수행합니다. 결괏값이 아니더라도 이 테스트를 통해 나온 결과에서 검증해야 하는 부분이 있다면

2023년 3월 25일
·
0개의 댓글
·

Mockito, Mock 과 Spy

도입 아래와 같은 예시 코드가 있다. 테스트는 "무조건 실패시킬꺼" 에러를 빵빵 터뜨린다. 이 테스트를 성공시키기 위해서는 MemberCreator 에 의존하고 있는 Validator 와 EmailSender 를 Mocking 처리해야 한다. 테스트는 성공하게 된다. > [결과] id = 1 name = 꿣꿣꿣 멤버 생셩됨 Mock 과 Spy 테스트를 하는 객체에서 하나의 메소드에 대해서만 리턴값을 변경하고 싶을 때가 있다. 이러한 사항을 처리할 때 Mock 을 사용하여 처리하면 모든 메소드가 Mocking 처리되기 때문에 안된다. 이 때 Spy 를 사용하게 되면 하나의 메소드에 대한 Mocking 처리를 할 수 있다. > [결과] id = 1 name = 꿣꿣꿣 MockBean 과 SpyBean 스프링 어플리케이션 컨텍스트에서 관리되는 Bean 객체를 Mockito 객체로 덮어씌움 Mock : 기존 기능을 모두 하지 않고 메소드 시그니

2022년 8월 4일
·
1개의 댓글
·
post-thumbnail

[JUnit & Mockito] Controller Unit Tests with Service using @MockBean

🚀 Controller Unit Tests with Service 만약 테스트할 컨트롤러가 의존성이 있는 서비스 빈이 있다면 스프링 부트에서 제공해주는 어노테이션을 통해서 해당 빈을 주입시키고 Mock Object로 생성해줍니다. 그다음에 똑같이 해당 Mock Object 가 가질 행동(Behavior)을 지정해주면 됩니다.

2020년 8월 28일
·
0개의 댓글
·