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





  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/bobo132/p/13950376.html
Copyright © 2011-2022 走看看