Spring Boot的一个测试用例

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

原文地址:https://www.cnblogs.com/softidea/p/5699323.html