0
Im은 내 Spring REST 컨트롤러를 테스트하려고하지만 내 @Service
은 항상 DB에 연결하려고합니다.시험 중 의심스러운 @Service가 데이터베이스에 연결
컨트롤러 :
@RestController
@RequestMapping(value = "/api/v1/users")
public class UserController {
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<List<User>> getAllUsers() {
List<User> users = userService.findAll();
if (users.isEmpty()) {
return new ResponseEntity<List<User>>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<List<User>>(users, HttpStatus.OK);
}
테스트 : 대신 복귀로 first
및 second
을 받고,이 DB에서 데이터를 읽기 때문에 항상 실패
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
public class UserControllerTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(wac).build();
}
@Test
public void getAll_IfFound_ShouldReturnFoundUsers() throws Exception {
User first = new User();
first.setUserId(1);
first.setUsername("test");
first.setPassword("test");
first.setEmail("[email protected]");
first.setBirthday(LocalDate.parse("1996-04-30"));
User second = new User();
second.setUserId(2);
second.setUsername("test2");
second.setPassword("test2");
second.setEmail("[email protected]");
second.setBirthday(LocalDate.parse("1996-04-30"));
UserService userServiceMock = Mockito.mock(UserService.class);
Mockito.when(userServiceMock.findAll()).thenReturn(Arrays.asList(first, second));
mockMvc.perform(get("/api/v1/users")).
andExpect(status().isOk()).
andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)).
andExpect(jsonPath("$", hasSize(2))).
andExpect(jsonPath("$[0].userId", is(1))).
andExpect(jsonPath("$[0].username", is("test"))).
andExpect(jsonPath("$[0].password", is("test"))).
andExpect(jsonPath("$[0].email", is("[email protected]"))).
andExpect(jsonPath("$[0].email", is(LocalDate.parse("1996-04-30")))).
andExpect(jsonPath("$[1].userId", is(2))).
andExpect(jsonPath("$[1].username", is("test2"))).
andExpect(jsonPath("$[1].password", is("test2"))).
andExpect(jsonPath("$[1].email", is("[email protected]"))).
andExpect(jsonPath("$[1].email", is(LocalDate.parse("1996-04-30"))));
verify(userServiceMock, times(1)).findAll();
verifyNoMoreInteractions(userServiceMock);
}
}
내 테스트. DB를 끄면 NestedServletException, nested: DataAccessResourceFailureException
이 발생합니다.
어떻게 제대로 테스트 할 수 있습니까? 내가 도대체 뭘 잘못하고있는 겁니까?
당신은 아무것도 조롱하지 않습니다 ... 귀하의 응용 프로그램은 여전히 실제 서비스를 사용합니다. 모의 실험을하려면 테스트에서'UserService' 타입의 필드를 만들고'@MockBean'으로 주석을 달고 (수동 모의 생성을 제거하십시오.) 수동으로'MockMvc'을'@ Autowired '로 만들고 대신 스프링 부트 테스트 지원이 당신을 위해 그것을 처리합니다. –