Spring-JUnit

이호영·2022년 3월 10일
0

Spring

목록 보기
16/18

TDD(Test-driven Development)
테스트 주도 개발에서 사용하지만 코드의 유지보수 및 운영 환경에서의 에러를 미리 방지하기 위해서 단위별로 검증하는 테스트 프레임 워크

단위 테스트
작성한 코드가 기대하는 대로 동작을 하는지 검증하는 절차

JUnit
Java기반의 단위 테스트를 위한 프레임워크 Annotation 기반으로 테스트를 지원 하며 Assert를 통하여 (예상,실제)를 통해 검증

모킹처리
테스트하고자 하는 코드가 의존하는 function이나 class에 대해 모조품을 만들어 '일단' 돌아가게 하는 것

예제코드(Main)

public class DollarCarculator implements ICarculator{

    private int price=1;
    private MarketApi marketApi;

    public DollarCarculator(MarketApi marketApi){
        this.marketApi=marketApi;
    }

    public void init(){
        this.price=marketApi.connect();
    }

    @Override
    public int sum(int x, int y) {
        x*=price;
        y*=price;
        return x+y;
    }

    @Override
    public int minus(int x, int y) {
        x*=price;
        y*=price;
        return x-y;
    }
}
public class MarketApi {

    public int connect(){
        return 1100;
    }
}
public class KrwCarculator implements ICarculator {

    private int price=1;

    @Override
    public int sum(int x, int y) {
        x*=price;
        y*=price;
        return x+y;
    }

    @Override
    public int minus(int x, int y) {
        x*=price;
        y*=price;
        return x-y;
    }
}
public interface ICarculator {

    int sum(int x, int y);
    int minus(int x, int y);

}
public class Carculator {

    private ICarculator iCarculator;

    public Carculator(ICarculator iCarculator) {
        this.iCarculator = iCarculator;
    }

    public int sum(int x, int y) {
        return this.iCarculator.sum(x, y);
    }

    public int minus(int x, int y) {
        return this.iCarculator.minus(x, y);
    }
}

Test 코드

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class DollarCarculatorTest {

    @Mock
    public MarketApi marketApi;

    @BeforeEach
    public void init() {
        Mockito.lenient().when(marketApi.connect()).thenReturn(3000);
    }

    @Test
    public void testhello() {
        System.out.println("Test hello");
    }

    @Test
    public void dollarTest() {
        MarketApi marketApi = new MarketApi();
        DollarCarculator dollarCarculator = new DollarCarculator(marketApi);
        dollarCarculator.init();

        Carculator carculator = new Carculator(dollarCarculator);
        System.out.println(carculator.sum(10, 10));

        Assertions.assertEquals(22000, carculator.sum(10, 10));
    }

    @Test
    public void MockTest() {
        DollarCarculator dollarCarculator = new DollarCarculator(marketApi);
        dollarCarculator.init();

        Carculator carculator = new Carculator(dollarCarculator);
        System.out.println(carculator.sum(10, 10));

        Assertions.assertEquals(60000, carculator.sum(10, 10));
        Assertions.assertEquals(0, carculator.minus(10, 10));
    }
}

0개의 댓글