service단에서 @value annotaion으로 properties파일에 설정되어있는 값을
불러와서 사용하는 경우가 있다.
아래와 같이 service를 하나 만들고
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@Service
public class StudentService{
// 이런식으로 불러와서 값을 셋팅
@Value("${host.url}")
private String host;
private StudentRepository studentRepository;
public StudentService(StudentRepository studentRepository){
this.studentRepository = studentRepository;
}
// 아래와같은 메소드가 있을때
public String studentTest(){
String path = "/test/update"
String url = host.concat(path);
Student student = studentRepository.findByUrl(url);
//생략 }
}
|
cs |
아래와 같이 service에 대한 test를 만들어본다.(첫번째라인의 어노테이션은 반드시 입력해주도록!)
분명 실행하면 NPE(null point exception)이 발생한다.
이유는 service의 16번째라인에서 concat메소드를 실행하면서 host의 값이 null이기 때문이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@RunWith(MockitoJUnitRunner.class)
public class StudentServiceTest{
@Mock
StudentRepository studentRepository;
@InjectMock
StudentService studentService;
@Test
public void method_test(){
when(studentRepository.findByUrl(anyString())).thenReturn(Student.builder().id(1L).build());
studentService.studentTest();
}
}
|
cs |
그렇다면 위와같이 테스트를 실행하면서 오류를 안나게 하려면?
host의 값을 주입시켜줘야 되는데
아래의 setUp()메소드에서 처럼 값을 주입시켜준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@RunWith(MockitoJUnitRunner.class)
public class StudentServiceTest{
@Mock
StudentRepository studentRepository;
@InjectMock
StudentService studentService;
@Before
public void setUp() {
ReflectionTestUtils.setField(studentService, "host", "http:://localhost:8085");
}
@Test
public void method_test(){
when(studentRepository.findByUrl(anyString())).thenReturn(Student.builder().id(1L).build());
studentService.studentTest();
}
}
|
cs |
'IT > 개발' 카테고리의 다른 글
spring 파일 업로드 (0) | 2020.10.27 |
---|---|
no suitable constructor found for type 에러 분석 (0) | 2020.10.26 |
JAVA 상대경로 (0) | 2019.12.02 |
JAVA 입력과 출력 stream (0) | 2019.10.19 |
Spring ibatis resultMap 쿼리 2개실행 (0) | 2019.10.16 |