mock: 6개의 글
● Mockito로 테스트코드를 작성하는 이유 @SpringBootTest 로 테스트코드를 작성하다보며 시간이 지날수록 프로젝트의 덩치가 커지면서 테스트코드를 실행하는데 굉장히 많은 시간이 걸리며 빌드시에도 많은 시간이 소요된다. 따라서 단위 테스트단위로 코드 작성시에는 mockito를 이용하여 테스트코드를 짜는것이 유용하다고 판단된다. @RunWith(MockitoJUnitRunner.class) @ExtendWith(MockitoExtension.class) 모두 Mockito의 Mock 객체를 사용하기 위한 Annotation이다 @RunWith는 junit4 @ExtendWith 는 junit5 사용시 정의하면 된다. ● Mockito를 이용한 예제 import java.util.Optional;..
이번 포스팅에서는 목(Mock) 객체를 사용하여 테스트하기 힘든, 혹은 외부환경과 의존성을 끊는 테스트를 하기 위한 방법을 간단하게 다루어 볼 것이다. 여기서 다루는 목(Mock)객체는 정말 단순한 수준의 예제이다. 결과적으로 이번 포스팅의 목적은 목객체는 무엇이고 왜 사용하는 지에 대한 내용이 될 것 같다. 지금 진행할 예제는 크게 코드 내용 자체를 알필요?는 없을 것 같다. 이 말은 우리가 개발하며 테스트를 작성할 때, 코드의 내용을 몰라도 된다는 말이 아니다. 테스트 작성은 당연히 코드의 내용을 빠삭히 알고 작성해야 하는 테스크이기 때문이다. 필자가 말하는 "알 필요는 없다"라는 것은 이번 포스팅은 독자들과 같이 애플리케이션을 개발하며 테스트를 작성하는 포스팅이 아니고 어느 순간에 목객체를 사용해야..
Test Code Test Method 명명 방식 1. Test 대상 method와 이름을 1:1로 매치 - getName()-> test_getName() 2. 1:1로 매치 후 메소드명에 예상 동작 표현 - getName() -> test_getName_isSuccess() 3. 테스트 시나리오에 맞게 정하기 접근 방식 1. 시나리오식 접근 방법 1)Happy Day 시나리오 - 정상적인 흐름일 때, 동작해야 하는 결과값 선정 2)Blue Day 시나리오 - 예외나 에러 상황에 대한 결과값 선정 2. 삼각측량법 - 곱하기 메소드의 경우 (a*b)와 같은지, a를 b번 더한 것과 같은지 확인하는 방법 3. Edge Case - 경계 조건의 값들로 테스트하는 방법 Mock Mock 객체 - 모듈의 겉모양..
11. ArgumentCaptor 보통 verify시 아규먼트 값을 직접 지정하지만 ArgumentCaptor를 사용하면 capture를 통해 유연하게 아규먼트 값을 넘길 수 있습니다. @Test void capture() throws Exception{ // stubbing final List mockedList = mock(List.class); when(mockedList.get(1)).thenReturn("A"); when(mockedList.get(2)).thenReturn("B"); when(mockedList.get(3)).thenReturn("C"); // 1. ArgumentCaptor integerArgumentCaptor = ArgumentCaptor.forClass(Integer.c..
Mockito란? Mockito는 Mock Object를 creation, verification, stubbing 해주는 JAVA에서 사용되는 라이브러리입니다. Mock Object 객체 지향 프로그래밍으로 개발한 프로그램을 테스트할 때 테스트를 수행할 모듈과 연결되는 외부의 다른 모듈을 흉내 내는 가짜 모듈을 생성하여 테스트의 효용성을 높이는 데 사용하는 객체입니다. 의존성 추가 plugins { id 'java' } repositories { mavenCentral() } dependencies { testImplementation('org.junit.jupiter:junit-jupiter:5.6.0') testImplementation('org.assertj:assertj-core:3.11.1')..
1. 테스트를 왜 해야하는가? 테스트를 안하는 개발자는 없다. 코드 작성 후 서버를 뛰워서 api url을 호출해서 응답값을 확인해보고, UI에서 버튼을 눌러보고 하는 것도 모두 테스트이다. 그러나 여기서 다루는 테스트의 정의는 '개발자가 작성한 테스트 코드에 의한 테스트'이다. 이것은 코드로 작성되었으므로 테스트 자동화가 가능해지며(CI연동 등), 다른 개발자도 이것을 통해 동일하게 반복적으로 테스트할 수 있어진다. 1-1. 테스트 코드의 중요성 반복적인 행위를 줄여준다. (비용감소) 테스트코드 없이 테스트를 하려면 계속 서버를 on/off하며 수동으로 동작시켜 줘야 할 것이다. (주로 nodemon 활용) 궁극적으로 애플리케이션이 복잡해진다면 테스트역시 복잡해진다. 빠른 오류&버그 확인과 수정, 리팩..