<!-- 기존 pom 파일에 spring-context와 spring-test를 의존성에 추가-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
수정 후에는 프로젝트 우클릭 -> Maven -> Update Projects 해주기
xml파일 또는 Java Config로 설정 파일을 작성해야 스프링 프레임워크를 사용할 수 있음
-> Java Config 클래스를 src/main/java
에 생성
ApplicationConfig.java
package org.edwith.webbe.calculatorcli;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration //스프링 설정 파일을 의미
@ComponentScan(basePackages = {"org.edwith.webbe.calculatorcli"})
//특정 패키지 이하에서 컴포넌트를 찾도록 함
//설정된 패키지 이하로부터 어노테이션이 붙은 클래스를 찾아 빈으로 등록
public class ApplicationConfig {
}
CalculatorService.java
package org.edwith.webbe.calculatorcli;
import org.springframework.stereotype.Component;
@Component // 스프링 빈 컨테이너가 이 클래스를 찾아 빈으로 등록할 수 있도록 함
public class CalculatorService {
public int plus(int v1, int v2) {
return v1+v2;
}
public int minus(int v1, int v2) {
return v1 - v2;
}
public int multiple(int v1, int v2) {
return v1*v2;
}
public int divide(int v1, int v2) {
return v1/v2;
}
}
CalculatorService 클래스를 빈으로 받아와 사용하기 위해 src/main/java
경로에 메인 클래스를 생성한다.
Main.java
package org.edwith.webbe.calculatorcli;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
// ApplicationConfig.class 설정파일을 읽어들이는 객체 생성
// 아래 줄이 실행되면 컴포넌트 스캔을 하고, 컴포넌트를 찾았다면 인스턴스를 생성하여 관리
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ApplicationConfig.class);
//ApplicationContext가 관리하는 CalculatorService.class 타입의 객체 요청
CalculatorService calculatorService = applicationContext.getBean(CalculatorService.class);
// ApplicationContext로부터 받은 객체를 이용해 덧셈 함수 실행
System.out.println(calculatorService.plus(10, 50));
}
}
CalculatorServiceTest.java
package org.edwith.webbe.calculatorcli;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class) // @RunWith: Junit이 제공하는 어노테이션
// SpringJUnit4ClassRunner.class: JUnit의 확장 기능을 사용할 수 있도록 스프링에서 제공함
// 목적: 테스트코드를 실행 시 스프링 빈 컨테이너가 내부적으로 생성되도록 함
@ContextConfiguration(classes= {ApplicationConfig.class})
// 스프링 빈 컨테이너가 사용할 설정 파일 지정
//앞선 두 줄의 어노테이션을 작성하면 테스트클래스 자체가 Bean 객체가 되어 스프링에서 관리됨
public class CalculatorServiceTest {
@Autowired //CalculatorService를 스프링 빈 컨테이너로부터 주입받음
CalculatorService calculatorService;
// 스프링 빈 컨테이너를 사용할 때는 개발자가 직접 인스턴스 생성 불가!
// @Before
// public void init() {
// this.calculatorService=new CalculatorService();
// }
@Test
public void plus() throws Exception{
//given
int v1= 10;
int v2=5;
//when
int result = calculatorService.plus(v1, v2);
//then
Assert.assertEquals(15, result);
}
@Test
public void divide() throws Exception{
//given
int v1=10;
int v2=5;
//when
int result = calculatorService.divide(v1, v2);
//then
Assert.assertEquals(2, result);
}
@Test
public void divideExceptionTest() throws Exception{
int v1 = 10;
int v2= 0;
try {
calculatorService.divide(v1, v2);
}catch(ArithmeticException ae) {
Assert.assertTrue(true);
}
Assert.assertFalse(false);
}
}