자바 JUNIT 간단하게 사용해 보기

작성자 : 조회수 :

제가 새로운 포트폴리오를 만들기 앞서 먼저

 

테스트 환경을 구성하고 싶었습니다.

 

전에 만들었던 프로젝트 두 가지는 전부 테스트 환경을 마땅히 사용하지 못하였는데요

 

실제로 어떤 서비스를 만들 때 테스트 환경이 있는지 없는지의 차이를 체감한 저는 중요성을 느껴

 

JUnit을 사용하기로 했습니다.


단위 테스트를 진행하는 이유는 유지보수, 운영환경에서 에러를 미리 방지하기 위함입니다.(TDD)

 

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

JUnit – Assert를 통해 (예상, 실제)를 통해 검증

 

 

한번 간단한 예제들을 통해서 진행해 보겠습니다. 먼저

 

사전에 필요한 의존성들을 말씀 드리겠습니다.

// 주비터 JUnit 테슽 환경을 위해 사용

// 주비터 JUnit 테슽 환경을 위해 사용
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.6.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
testImplementation 'org.mockito:mockito-core:3.9.0'
testImplementation 'org.mockito:mockito-junit-jupiter:3.9.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test:2.6.2'



Mock jnit, 그리고 스프링부트의 테스트를 위한 의존성 추가입니다.

 

스프링부트 버전은 2.6.3 입니다.

 

 

 

 

 

 

 

 

 

일단 예제 클래스들을 만들기 앞서 보통 junit을 사용하지 않을 때는 테스트 코드를 작성 후 테스트가 완료되면

 

지우는 식으로 저는 코드를 작성했습니다.

 

하지만 junit을 사용하면 따로 테스트 공간이 생기며 그곳에서 테스트를 작성, 결과값을 도출 해낼 수 있습니다.

 

중요하게 볼 부분은 아니지만 그래도 예제를 간단히 본다면

 

Profession은 게임 직업이라고 생각하면 편합니다.

 

직업에는 전사, 마법사가 있고, 마법사는 특수한 클래스 ManaInject(마나 주입)를 받습니다.




아래 예제 코드입니다.

 

 

먼저 게임의 직업이라 생각하면 될 것 같습니다

 

인터페이스 IProfession을 만든 후 Profession 클래스에 IProfession을 주입시킵니다



왼쪽 Main 본다면 보통 저는 메인 메소드 안에 테스트 코드를 작성 후 원하는 값을 얻으면

 

지우거나 따로 메인 메소드를 만드는 식으로 진행 했습니다.

 

하지만 이런 식으로 하지 않고 Test 환경을 구축해보겠습니다



테스트

 

의존성만 잘 추가됐다면 생각보다 간단합니다.

 


@Test 어노테이션을 추가한 후 그냥 그대로 단위테스트를 진행하면 됩니다.

 

그리고 주의 깊게 볼 점은 



예상치를 두고 테스트를 진행할 수 있다는 점입니다.

 

Assrtions.assertEquals 메소드를 이용해 첫번 째 값은 예상 값, 두번 째 값은 사용할 메소드를 넣어줍니다.

 

 

 

 

 

 

만약 예상 값과 결과값이 같다면 아래처럼 Bulid successful 이지만




예상 값이 틀렸다면,

 

예상 값과 실제로 나온 값을 보여줍니다.





MOCK 테스트

 

여기서 흥미로운 점은

 

Mock 처리를 통해서 이미 정해진 메소드의 결과값을 내가 테스트 환경에서 임의로 반환 값을 변환해 줄 수 있다는 점입니다.




위의 사진을 보면 아까 그림을 그린 ManaInject 라는 특정 클래스를 Mock 처리해서

 

29번째 줄을 보면 클래스 안의 메소드 getMana값을 thenReturn 을 통해 


기존에 30을 반환하는 getMana 메소드를 10으로 반환하도록 하는것이다.


Wizard 클래스






그 후에 mock 처리한 ManaInject를 생성자 부분에 넣습니다.


68번째 줄의 mana 그럼 70번째 줄의 테스트를 실행하면 mock처리된 getMana가 실행되는 것입니다.


위의 코드를 본다면 70번 째 줄과 77번째 줄 사실 Mock 처리가 안됐다면

 

테스트는 문제없이 실행 될 테지만 아래 결과를 보면


77번째 줄이 에러가 나는 것을 확인함을 동시에

 

Mock 처리가 올바르게 되었다는 것을 알 수 있습니다.


다음시간에는 스프링부트를 이용해서 junit 테스트를 해보겠습니다.