> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/web/back-end/what-is-spring-framework/spring-test.md).

# Spring Test

이 문서에서는 Spring에서 test를 수행하는 방법에 대해 살펴본다.

## pom에 의존성 추가

spring test를 수행하기 위해서는 두 가지 모듈이 필요하다.

* spring-test
* junit

maven 중앙 저장소에서 버전을 확인한 뒤 pom.xml에 추가한다.

> pom.xml

```markup
<dependencies>
	...(생략)...
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${org.springframework-version}</version>
	</dependency>
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>4.12</version>
	    <scope>test</scope>
	</dependency>
	...(생략)...
</dependencies>
```

dependency를 추가한 뒤 업데이트를 수행한다.

## Test Class 생성

Test Class는 기존과 다른 소스폴더에 생성한다.

![test 파일 생성 위치](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MdFg-tsMYNiWEl35ZZF%2F-MdFgx0jDPx75rZh8x0c%2Fimage.png?alt=media\&token=28c034b9-24ac-452c-a77b-3def380510a6)

src/test/java와 src/test/resources는 빌드시 제외되기 때문에 마음대로 테스트를 만들어 수행할 수 있다.

src/test/java에 있는 com.hakademy.spring11 패키지에 클래스를 생성한다.

> com.hakademy.spring11.Test01

```java
package com.hakademy.spring11;

import org.junit.Test;

public class Test01 {

	@Test
	public void standalone() {
		System.out.println("junit test 실행");
	}
	
}
```

## Standalone Test

@Test는 JUnit에서 제공하는 Annotation이며 JUnit으로 실행 시 독립적으로 기능을 수행하는 테스트케이스가 된다. 메소드는 반드시 반환형이 void이며 매개변수가 없어야 한다. @Test는 여러 개 만들 수 있으며, 이 외에도 다양한 Annotation을 JUnit에서 지원한다.

### Test case 실행

작성된 테스트케이스(@Test)를 실행할 때에는 JUnit Test를 선택하여 실행해야 한다.

![Junit Test를 눌러 실행해야 한다](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MdFg-tsMYNiWEl35ZZF%2F-MdFh1Y3sCc7nbj88qf0%2Fimage.png?alt=media\&token=280cc12d-b8bc-476a-a035-2705a7edeb96)

실행하면 다음과 같이 JUnit 결과창이 나오며 테스트 실행 결과를 알려준다.

![Junit test 실행 결과 화면](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MdFg-tsMYNiWEl35ZZF%2F-MdFh7ZCaeti8OCD32NF%2Fimage.png?alt=media\&token=afde580d-b53b-4206-936d-e35d8f5f221e)

### Test case 분석

테스트 케이스는 성공과 실패로 결과가 나뉜다.

![테스트 성공 시 결과 화면](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MdFg-tsMYNiWEl35ZZF%2F-MdFhBeGZQKyNTA1cePI%2Fimage.png?alt=media\&token=b33ddc42-0491-49b2-9e96-d7521a2dfc55)

![테스트 실패 시 결과 화면](https://4208234536-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M_TNZwLuHV9ipYLbvRq%2F-MdFg-tsMYNiWEl35ZZF%2F-MdFhHvqtCyO0d9A_Vfu%2Fimage.png?alt=media\&token=b07dd333-e837-4016-8ca8-826f8be3e9c7)

또한 소요 시간 등이 나오기 때문에 다양한 정보를 통해 단위 기능을 테스트할 수 있도록 지원한다.
