zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    高并发场景之RabbitMQ
    后台任务利器之Hangfire
    【Spring】Redis的两个典型应用场景--good
    【Spring】如何在单个Boot应用中配置多数据库?
    Spring Boot中集成Spring Security 专题
    RestTemplateIntegrationTests
    Spring REST实践之客户端和测试
    Android 高仿豌豆荚 一键安装app 功能
    使用Android studio下载github上的工程及问题解决
    Windows下AndroidStudio 中使用Git(AndroidStudio项目于GitHub关联)
  • 原文地址:https://www.cnblogs.com/softidea/p/5699323.html
Copyright © 2011-2022 走看看