MyService.java
package org.edwith.webbe.calculatorcli;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private final CalculatorService calculatorService;
public MyService(CalculatorService calculatorService) {
this.calculatorService=calculatorService;
}
public int execute(int v1, int v2) {
return calculatorService.plus(v1, v2) * 2;
}
}
오픈소스 목 프레임워크
테스트를 위한 가짜(Mock) 객체를 쉽게 만들 수 있도록 함
현재 진행중인 예제에 빗대어보자면, MyService에서 CalculatorService 객체를 직접 가져와 사용하는 대신, 가짜 객체(Mock)을 생성하여 원하는 동작(CalculatorService의 동작)을 Mock 객체에서 실행하여 MyService 내용만 테스트할 수 있음
MyServiceTest.java
package org.edwith.webbe.calculatorcli;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.beans.factory.annotation.Autowired;
import static org.mockito.Matchers.anyInt;
//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(classes = {ApplicationConfig.class})
@RunWith(MockitoJUnitRunner.class) // mockito가 제공하는 JUnit확장 클래스를 이용해 테스트 클래스 실행
public class MyServiceTest {
//@Autowired
@InjectMocks // Mock 객체를 사용하는 MyService 객체를 생성해 초기화
MyService myService;
@Mock // calculatorService가 Mock 객체를 참조하도록 함
CalculatorService calculatorService;
@Test
public void execute() throws Exception{
//given
int v1 = 5;
int v2 = 10;
// org.mockito.BBDMockito.given: Mock 객체가 동작하는 방법을 규정하는 메소드
// 보통 static 함수로 import해서 사용함
// Mock 객체에서 plus연산이 잘 작동하는지 확인
org.mockito.BDDMockito.given(calculatorService.plus(5, 10)).willReturn(15);
//when
int result = myService.execute(v1, v2);
//then
// verify: 파라미터로 들어온 객체의 plus 메소드가 (int, int)를 입력받아 호출된 적 있는지 검증
org.mockito.Mockito.verify(calculatorService).plus(anyInt(), anyInt());
Assert.assertEquals(30, result);
}
}
만약 MyService에서 CalculatorService 객체의 plus 메소드를 사용해 execute연산을 하지 않는다면, verify부분에서 에러 발생
given을 없애면 verify부분에서 에러 발생 -> 쌍으로 작성해야 할듯
MyService의 execute 메소드에서 사용되는 CalculatorService의 메소드가 plus이므로, plus 연산에 대해 given, verify를 하여 Mock 객체의 동작을 추적함