Across application testing

It is possible to test your @AcrossApplication with Spring Boot testing support. Using the @SpringBootTest in your tests is necessary for default application.properties loading and YAML support. Refer to the Spring Boot reference documentation for more information on Spring Boot testing facilities.

Web integration test

A full-stack web integration test (eg. with an embedded Tomcat) does not require any special configuration.

You can use @ExposeForTest in combination with @SpringBootTest to expose additional components during test execution.

Example integration test with an embedded servlet container on a random port
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = MyApplication.class)
public class TestSpringBootWebIntegration
{
	private final TestRestTemplate restTemplate = new TestRestTemplate();

	@Value("${local.server.port}")
	private int port;

	@Test
	public void controllersShouldSayHello() {
		assertEquals( "application says hello", get( "/application" ) );
		assertEquals( "infrastructure says hello", get( "/infrastructure" ) );
	}

	private String get( String relativePath ) {
		return restTemplate.getForEntity( url( relativePath ), String.class ).getBody();
	}

	private String url( String relativePath ) {
		return "http://localhost:" + port + relativePath;
	}
}

Integration test with MockMvc support

It is also possible to start your entire @AcrossApplication without an embedded servlet container. However if you want to have support for MockMvc instantiated with dynamically registered filters, you must manually configure the application loader to use a MockAcrossServletContext. This is done by adding the required configuration to @SpringBootTest and initializer classes to the @ContextConfiguration. See the appendix section for an overview of all configuration classes available.

Example Spring Boot integration test with MockMvc
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringBootTest( classes = { MyApplication.class, MockMvcConfiguration.class } )
@ContextConfiguration( initializers = MockAcrossServletContextInitializer.class )
public class TestSpringBootMockMvc
{
	@Autowired
	private MockMvc mockMvc;

	@Test
	public void controllersShouldSayHello() throws Exception {
		assertContent( "application says hello", get( "/application" ) );
		assertContent( "infrastructure says hello", get( "/infrastructure" ) );
	}

	private void assertContent( String expected, RequestBuilder requestBuilder ) throws Exception {
		mockMvc.perform( requestBuilder )
		       .andExpect( status().isOk() )
		       .andExpect( content().string( is( expected ) ) );
	}
}
Using @AcrossWebAppConfiguration in combination with @SpringBootTest is not possible, as the context loaders they use conflict with each other.