Light Blue Pointer
본문 바로가기
Developing/TIL(Develop)

테스트코드

by Greedy 2023. 11. 2.

테스트코드

테스트의 필요성

버그 : 소프트웨어가 예상하지 못한 결과를 내는 것

'소스 코드'나 '설계과정에서의 오류' 때문에 발생

테스트 : 소프트웨어가 예상한대로 결과를 내는지 모든 상황을 체크해보기

버그는 사용자에게 큰 불편을 주고 회사에 큰 손실을 줌

개발 코드 배포 전 버그를 최대한 많이 찾아내기 위해 테스트를 함

테스트의 종류

블랙박스 테스팅

소프트웨어 내부 구조나 동작원리를 모르는 블랙박스와 같은 상태에서(사용자 입장) 동작을 검사

  1. 장점
    • 누구나 테스트가 가능
  2. 단점
    • 기능이 증가될 수록 테스트의 범위가 증가
    • 시간이 갈수록 테스트하는 사람이 계속 늘어나야
    • 테스트 하는 사람에 따라 테스트 퀄러티가 다름→ QA 직군이 있는 이유

개발자 테스트

개발자가 직접 "본인이 작성한 코드"를 검증하기 위해 "테스트 코드"를 작성

  1. 장점
    • 빠르고 정확한 테스트가 가능(예상 동작 VS 실제 동작)
    • 테스트 자동화가 가능
      • 배포 절차 시 테스트 코드가 수행되어 동작 검증
    • 리팩토링이나 기능 추가를 할 때 편리
  2. 단점
    • 개발 시간이 오래 걸림
    • 테스트 코드를 유지보수하는 비용

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

Jun 12, 2016 at 12:33

dependencies에 넣는다고 자동으로 다 해주는거 아니었나봄

add to classpath 눌렀더니 해결되었다

 

'Developing > 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