• Spring Web项目集成 Junit


    1. 不使用 Spring Test + Junit 集成时, 对 Spring Web项目进行单元测试

    1.1 代码如下

    public class UserServiceTest {
    
        private ApplicationContext ctx = null;
    
        @Before
        public void setUp() {
            ctx = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");
        }
    
        @Test
        public void addUser() {
    
            User user = new User();
            user.setNickname("test-nickname");
            user.setPassword("test-password");
    
            UserService userService = (UserService) ctx.getBean("userService");
            Assert.assertNotNull(userService);
        }
    }
    1.2 缺点: 
    1). 繁琐. 需要手动获取ApplicationContext; 无法使用 @Resource 或 @AutoWired 注入依赖对象
    2). 无法实现事务

    2. 使用 Spring Test + Junit 来完成单元测试
    2.1 Maven项目导入依赖
    <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-test</artifactId>
         <version>4.3.9.RELEAS</version>
    </dependency>
    <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.12</version>
    </version>
    </dependency>
    2.2. 建立抽象的测试基类, 供其他测试类继承使用以快速编写Junit测试用例, 而不需要每次都进行配置, 代码如下

    /**
     *
     * RunWith 注解
     *
     * 1. RunWith 是 JUnit的一个常用注解, 用于指定 测试运行器
     *      要弄清楚什么是 测试运行器, 首先要明白几个概念: 测试方法, 测试类, 测试集, 测试运行器
     *        其中 测试方法是使用 @Test注解的一些方法
     *             测试类是包含一个或多个测试方法的 **Test.java文件
     *             测试集是一个 suite, 可能包含多个测试类
     *             测试运行器则决定了用什么方式偏好去运行这些测试集/类/方法
     * 2. 常见的运行器有
     *  1) @RunWith(Parameterized.class) 参数化运行器, 配合 @Parameters使用 Junit的参数化功能
     *  2) @RunWith(Suite.class)
     *   + @SuiteClasses(ATest.class, BTest.lass, CTest.class)  测试集运行器配合使用测试集功能
     *  3) @RunWith(Junit4.class) Junit4的默认运行器
     *  4) @RunWith(Junit38ClassRunner.class) 用于兼容 Junit3.8的运行器
     *  5) 一些其他运行器具备更多功能, 例如 @RunWith(SpringJunit4ClassRunner.class) 继集成 Spring的一些功能
     *
     *
     *
     * ContextConfiguration 注解
     *  用于加载配置文件
     *      locations (default value) 属性用于加载配置文件, 多个配置文件之间用逗号隔开 
     *      classes 属性用于加载配置类, 多个配置类之间用逗号隔开
     */
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration({"classpath*:applicationContext.xml"})
    public abstract class BaseServiceTest {
    
    
    }
    
    public class ProductServiceTest extends BaseServiceTest {
    
        @Resource(name = "productService")
        private IProductService productService;
    
        @Test
        public void testAddProduct() {
    
            Product product = new Product();
            product.setName("测试商品-1");
            product.setPrice(50);
            product.setCost(30);
            product.setImageUrl("https://--");
            product.setFactory("商品制造商-1");
            product.setCreateTime(new Date());
            product.setValid("Y");
    
            int res = productService.addProduct(product);
            System.out.println(res);
        }
    }





  • 相关阅读:
    BZOJ3196: Tyvj 1730 二逼平衡树
    (转载)你真的会二分查找吗?
    Codeforces Round #259 (Div. 2)
    BZOJ1452: [JSOI2009]Count
    BZOJ2733: [HNOI2012]永无乡
    BZOJ1103: [POI2007]大都市meg
    BZOJ2761: [JLOI2011]不重复数字
    BZOJ1305: [CQOI2009]dance跳舞
    挖坑#4-----倍增
    BZOJ1042: [HAOI2008]硬币购物
  • 原文地址:https://www.cnblogs.com/bobo132/p/13950376.html
Copyright © 2020-2023  润新知