Spring Boot Rest Testing

Can use @SpringBootTest for MVC applications, this annotation provides support for different webEnvironment modes and setup: RANDOM_PORT, DEFINED_PORT, MOCK, NODE.

This also configures TestRestTemplate.

TestRestTemplate

Alternative to RestTemplate for integration tests.

  • takes a relative path, instead of an absolute one.
  • fault tolerant, does not throw exception when error is received
  • ignores cookies and redirects
  • can be customized with RestTemplateBuilder
@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)
public class AccountClientBootTest{

 @Autowired
 private TestRestTemplate restTemplate;

 //Test code
}

MVC Test framework

Provide support for Spring MVC code, having requests processed through DispatcherServlet without container.

It uses MockMvcRequestBuilders and MockMvcResultMatchers

Slice testing

Performs isolated testing within a slice of an application, where dependencies need to be mocked.

Uses @WebMvcTest annotation and @MockBean.

@WebMvcTest(AccountController.class)
public class AccountControllerBootTests{

 @Autowired
 private MockMvc mockMvc;

 @MockBean
 private AccountManager accountManager;

 @Test
 public void someTest() throws Exception {
 // code
 }

}

Annotations

  • @Mock – from Mockito framework, used when Spring context is not required.
  • @MoockBean – from Spring boot, used with Spring context
  • @DataJpaTest – configures TestEntityManager an can use @AutoConfigureTestDatabase