소프트웨어가 예상하지 못한 결과를 내는 것.
버그 - '소스 코드'나 '설계과정에서의 오류' 때문에 발생.
소프트웨어 내부 구조나 동작원리를 모르는 블랙박스와 같은 상태에서,
즉, 웹 서비스의 사용자 입장에서 동작을 검사하는 방법
개발자가 직접 "본인이 작성한 코드"를 검증하기 위해 "테스트 코드" 작성
JUnit이란? 자바 프로그래밍 언어 용 단위 테스트 프레임워크
프로그램을 작은 단위로 쪼개 각 단위가 정확하게 동작하는지 검사,
이를 통해 문제 발생 시 정확히 어느 부분에서 잘못되었는지를 재빨리 확인.
Test-Driven Development
테스트 코드를 먼저 작성하고 실제 동작하는 코드를 개발하는 순서로 개발하는 개발 방법론.
설계 -> 테스트 -> 개발
테스트 코드를 작성하는 가장 대표적인 방법론.
논란의 여지가 있지만, 가장 쉽게 시작할만한 방법.
Given - 준비 / When - 실행 / Then - 검증
package com.sparta.myselectshop.entity;
import com.sparta.myselectshop.dto.ProductRequestDto;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
// (1)
class ProductTest {
@Test // (2)
@DisplayName("정상 케이스") // (3)
void createProduct_Normal() {
// (4) given - 준비!
Long userId = 100L;
String title = "오리온 꼬북칩 초코츄러스맛 160g";
String image = "https://shopping-phinf.pstatic.net/main_2416122/24161228524.20200915151118.jpg";
String link = "https://search.shopping.naver.com/gate.nhn?id=24161228524";
int lprice = 2350;
ProductRequestDto requestDto = new ProductRequestDto(
title,
image,
link,
lprice
);
// (5) when - 테스트하려는 로직 수행!
Product product = new Product(requestDto, userId);
// (6) then - 검증!
assertNull(product.getId()); // (6-a)
assertEquals(userId, product.getUserId()); // (6-b)
assertEquals(title, product.getTitle());
assertEquals(image, product.getImage());
assertEquals(link, product.getLink());
assertEquals(lprice, product.getLprice());
assertEquals(0, product.getMyprice());
}
}
이상적으로, 각 테스트 케이스는 서로 분리된게 좋음.
-> 가짜 객체(Mock object) 생성
mockito -> mock 객체들을 편리하게 만들고 관리해줌
mockito