2) pom.xml 파일을 다음과 같이 수정합니다.
생성된 pom.xml파일에는 불필요한 부분이 많습니다. 아래와 같이 pom.xml파일을 수정합니다.
라이브러리 의존성에 Junit이 있는 것을 확인할 수 있습니다. 그리고 JDK를 1.8로 사용하도록
Maven 플러그인을 설정하였습니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.edwith.webbe</groupId>
<artifactId>calculatorcli</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
3) 사칙연산을 구하는 CalculatorService 클래스를 작성합니다.
테스트를 할 CalculatorService 클래스를 작성해 보도록 하겠습니다.
CalculatorService클래스는 덧셈(plus), 뺄셈(minus), 곱셈(multiple), 나눗셈(divide)을 위한 메소드를 가집니다.
나누기의 경우 0으로 나누게 되면 ArithmeticException이 발생하기 때문에
divide() 메소드에는 ArithmeticException을 throws 하고 있는 것을 확인할 수 있습니다.
package org.edwith.webbe.calculatorcli;
public class CalculatorService {
public int plus(int value1, int value2) {
return value1 + value2;
}
public int minus(int value1, int value2) {
return value1 - value2;
}
public int multiple(int value1, int value2) {
return value1 * value2;
}
public int divide(int value1, int value2) throws ArithmeticException {
return value1 / value2;
}
}
4) CalculatorService클래스를 테스트하는 CalculatorServiceTest클래스를
/src/test/java 폴더 아래에 작성합니다.
package org.edwith.webbe.calculatorcli;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class CalculatorServiceTest {
CalculatorService calculatorService;
@Before
public void init(){
this.calculatorService = new CalculatorService();
}
@Test
public void plus() throws Exception{
int value1 = 10;
int value2 = 5;
int result = calculatorService.plus(value1, value2);
Assert.assertEquals(15, result);
}
@Test
public void divide() throws Exception{
int value1 = 10;
int value2 = 5;
int result = calculatorService. divide (value1, value2);
Assert.assertEquals(2,result);
}
@Test
public void divideExceptionTest() throws Exception{
int value1 = 10;
int value2 = 0;
try {
calculatorService.divide(value1, value2);
}catch (ArithmeticException ae){
Assert.assertTrue(true);
return;
}
Assert.assertFail();
}
}
먼저 코드를 살펴보면 @Before, @Test와 같은 어노테이션이 붙은 것을 확인할 수 있습니다.
Junit을 이용하는 테스트 클래스는 다음과 같은 어노테이션이 주로 이용됩니다.
comment
1. 스프링 설정을 기반으로 JUnit 프레임워크에서 가상의 컨테이너를 띄워서 테스트 할 Bean을 가져와 테스트를 수행하는 방법이 있을 것 같구요
2. 테스트 할 객체의 생성을 컨테이너에게 위임하지 말고 직접 해당 클래스의 인스턴스를 생성해서 테스트를 수행하는 방법이 있을 것 같습니다.
CalculatorServiceTest에서 Assert.assertFail(); 에러떠서 Assert.fail();로 했더니 잘 작동합니다
아니면 바로 위의 Assert.assertTrue(true)와 형식 맞춰서 Assert.assertFalse(false) 해도 잘 작동합니다
아니 생각해보기 문제 답 얻으려고 객체 테스트는 어떻게 하는지 구글링하고 돌아오니... 다음 장이 '스프링 테스트 애노테이션 사용하기'였네요...
테스트 클래스에 @RunWith(SpringJUnit4ClassRunner.class), @ContextConfiguration 어노테이션으로 테스트클래스가 컨테이너에서 관리되는 빈으로 만듭니다. 이후 Autowired 어노테이션을 통해서 테스트하고자 하는 다른 객체(Bean)들을 테스트 해봅니다.
JUnit의 주요 assert 메소드중 가장 하단의 assert.NotSame(ox,oy)의 설명이 잘못된것 같습니다.
같은 객체를 참조하고 있지 않다면 성공 아닌가요??
저는 53번째 줄 Assert.assertFail() 메소드가 없어서, Assert.fail()로 실행했습니다.