테스트코드
테스트의 필요성
버그 : 소프트웨어가 예상하지 못한 결과를 내는 것
'소스 코드'나 '설계과정에서의 오류' 때문에 발생
테스트 : 소프트웨어가 예상한대로 결과를 내는지 모든 상황을 체크해보기
버그는 사용자에게 큰 불편을 주고 회사에 큰 손실을 줌
개발 코드 배포 전 버그를 최대한 많이 찾아내기 위해 테스트를 함
테스트의 종류
블랙박스 테스팅
소프트웨어 내부 구조나 동작원리를 모르는 블랙박스와 같은 상태에서(사용자 입장) 동작을 검사
- 장점
- 누구나 테스트가 가능
- 단점
- 기능이 증가될 수록 테스트의 범위가 증가
- 시간이 갈수록 테스트하는 사람이 계속 늘어나야
- 테스트 하는 사람에 따라 테스트 퀄러티가 다름→ QA 직군이 있는 이유
개발자 테스트
개발자가 직접 "본인이 작성한 코드"를 검증하기 위해 "테스트 코드"를 작성
- 장점
- 빠르고 정확한 테스트가 가능(예상 동작 VS 실제 동작)
- 테스트 자동화가 가능
- 배포 절차 시 테스트 코드가 수행되어 동작 검증
- 리팩토링이나 기능 추가를 할 때 편리
- 단점
- 개발 시간이 오래 걸림
- 테스트 코드를 유지보수하는 비용
JUnit
자바 프로그래밍 언어 용 단위 테스트 프레임워크
build.gradle 파일을 열어보면 JUnit 사용을 위한 환경설정이 이미 되어있다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
테스트 실습을 위한 계산기를 만듦
package com.example.practice.Calculator;
public class Calculator {
public Double operate(double num1, String op, double num2) {
switch (op) {
case "*":
return num1 * num2;
case "/":
if (num2 != 0) {
return num1 / num2;
} else {
return null;
}
case "+":
return num1 + num2;
case "-":
return num1 - num2;
default:
throw new IllegalArgumentException("잘못된 연산자입니다.");
}
}
}
테스트 만드는 방법 1 : 클릭
우클릭 → Generate
테스트 클릭
테스트 만드는 방법 2 : 단축키 ctrl + shift + T
OK 누르면 자동으로 test폴더 아래에 파일이 생성됨
경로까지 동일하게 만들어준다
테스트코드
package com.example.practice.Calculator;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
class CalculatorTest {
@Test
@DisplayName("더하기 테스트")
void test1() {
Calculator calculator = new Calculator();
Double result = calculator.operate(8, "+", 2);
System.out.println("result = " + result);
Assertions.assertEquals(10, result);
}
@Test
@DisplayName("나누기 테스트")
void test2() {
Calculator calculator = new Calculator();
Double result = calculator.operate(8, "/", 2);
System.out.println("result = " + result);
Assertions.assertEquals(4, result);
}
}
근데 지금보니 패키지 이름은 소문자로 만들어야 하는데 대문자로 만들었다 ㅋ
테스트코드에 main함수가 없는 이유는 JUnit이 테스트 실행 환경을 따로 가지고 있기 때문이래
첫 테스트 수행!
테스트마다 각각 Run버튼이 좌측에 생기기 때문에 따로따로 테스트할 수 있다
체크버튼을 클릭하면 결과만 나옴
나누기 테스트도 수행
틀리게 해보면 이렇게 된다
강의에서 레파지토리 하나에다 계속 커밋하길래 어제 커밋하고 push까지 해놓은거를 지우고 새로 올리기로 함
그래서 여기다가 HelloWorld를 생성
그리고 또 빨간줄이 떴다
이번에는 jdk도 17로 잘 붙어있는데도
웹이 없어서 그런 거 같아서 웹을 추가해봄
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
여전히 안 된다
구글링해봄
– Andreas
- 1Arf ! I didn't knew it wouldn't be done automatically .. I've searched and found how to do it thx to you :) Jun 12, 2016 at 12:44
- – Antoine Grenard
- "Cannot resolve symbol 'String'" - looks like your Java installation is broken or you have not configured the JDK in Intellij Jun 12, 2016 at 17:06
- – OneCricketeer
- Mmmhh it is kind of strange cause when i go into project structure the jdk 1.8 appear .. Jun 12, 2016 at 17:32
- – Antoine Grenard
- My JDK Wasn't configured as it should have been i've found how to do it properly here : stackoverflow.com/questions/4618794/…
- – Antoine Grenard
dependencies에 넣는다고 자동으로 다 해주는거 아니었나봄
add to classpath 눌렀더니 해결되었다
'TIL(Develop)' 카테고리의 다른 글
Spring MVC (0) | 2023.11.02 |
---|---|
Lombok과 application.properties (0) | 2023.11.02 |
웹/Spring 기초 개념 공부 (1) | 2023.11.01 |
첫 실습! HelloWorld GET해오기 with SpringBoot + Postman (1) | 2023.11.01 |
Spring 입문 (1) | 2023.10.31 |