package tk.mybatis.springboot.mapper; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.transaction.annotation.Transactional; import tk.mybatis.springboot.Application; import tk.mybatis.springboot.model.City2; import java.util.ArrayList; import java.util.List; /** * @author liuzh * @since 2016-03-06 17:42 */ @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @Transactional @SpringApplicationConfiguration(Application.class) public class MyBatis331Test { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private MyBatis331Mapper mapper; @Test @Rollback public void testInsertList() { List<City2> city2List = new ArrayList<City2>(); city2List.add(new City2("石家庄", "河北")); city2List.add(new City2("邯郸", "河北")); city2List.add(new City2("秦皇岛", "河北")); Assert.assertEquals(3, mapper.insertCities(city2List)); for (City2 c2 : city2List) { logger.info(c2.toString()); Assert.assertNotNull(c2.getId()); } } @Test public void testSelectById(){ City2 city2 = mapper.selectByCityId(1); logger.info(city2.toString()); Assert.assertNotNull(city2); Assert.assertNotNull(city2.getCityName()); Assert.assertNotNull(city2.getCityState()); } @Test public void testSelectAll(){ List<City2> city2List = mapper.selectAll(); for(City2 c2 : city2List){ logger.info(c2.toString()); Assert.assertNotNull(c2); Assert.assertNotNull(c2.getCityName()); Assert.assertNotNull(c2.getCityState()); } } }
@Documented @Inherited @Retention(value=RUNTIME) @Target(value=TYPE) public @interface SpringApplicationConfiguration Class-level annotation that is used to determine how to load and configure an ApplicationContext for integration tests.
Similar to the standard ContextConfiguration but uses Spring Boot's SpringApplicationContextLoader. Author: Dave Syer See Also: SpringApplicationContextLoader
http://docs.spring.io/spring-boot/docs/1.1.x/api/org/springframework/boot/test/SpringApplicationConfiguration.html
What you are trying to do can easily be done with the following code:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestContextConfiguration.class)
public class ReportResponseAssemblerTest {
@Autowired
ReportInstanceResponseAssembler reportResponseAssembler;
@Test
public void testPlaceHolder() {
Assert.assertNotNull(reportResponseAssembler);
}
}
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.blahpackage.service.assembler" })
@Configuration
public class TestContextConfiguration {
}
The three classes you mention need to be under com.blahpackage.service.assembler
and also have to be annotated with some Spring stereotype annotation, like @Component
or @Service
. For example you would have:
@Component
public class ReportResponseAssembler {
@Autowired
private ParameterResponseAssembler parameterResponseAssembler;
@Autowired
private TimeRangeResponseAssembler timeRangeResponseAssembler;
public ReportResponseAssembler makeResponse() {
return new ReportResponseAssembler();
}
}
@Component
public class ParameterResponseAssembler {
//whatever
}
I would however advise that you use such a test rarely because of the performance implications. What I mean is that if you have a lot of these types of tests, Spring needs to create and destroy a different application context for each one, whereas if you use the same context and tests, Spring can (usually) cache the context. Check out this blog post for more details
http://stackoverflow.com/questions/26370743/how-to-use-springapplicationconfiguration-or-contextconfiguration-to-load-smalle