• Junit单元测试的简单使用(主要是在spring框架下的项目)


    首先是解释什么是单元测试,单元测试是指对于一个大型项目里,对于单一模块或者单一接口的测试。

    然后解释为什么要写单元测试,首先对于一个大型的项目,如果你每次都要重启一遍服务器调页面或者接口的bug,那就会很影响效率。

    那么一部分人就说了,我们都已经写了那么多业务逻辑代码了,为什么还要写那么多没有用的测试代码呢,反正最后bug肯定会在最终被发现的,而且测试这种事情不应该是测试干的事情吗?

    还有一部分人说,我水平以及很高了,徒手千行代码不出bug,不需要测试。

    对于前面一种人,我举个例子吧,如果你写20个接口有5个是有bug的,还不算这5个会不会导致其他的接口出问题,那么你排除一个错误的时间应该在30分钟左右,其中重启服务器,调试,运行,寻找,都要时间,而这30分钟,单元测试早就写完了。而且白盒测试,都是程序自己的事情。

    对于后一种人,我只能说,测试不是证明你是对的,而是证明你没有错。

    说了那么多,那么到底怎么写单元测试呢?

    首先单元测试的包应该和src同级目录,这样在项目完成之后就可以直接删除,不影响项目任何地方。

    导入JUnit4的jar包。

    新建一个工具类

    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * 单元测试工具类
     * @author XX
     *
     */
    public class UnitTestBase {
    
        protected static ClassPathXmlApplicationContext context = null;
        
        /*对于单一配置文件的项目利用这个做单元测试,直接把路径写死了*/
        @BeforeClass
        public static void setUpBeforeClass() throws Exception{
            //获取spring配置文件,生成上下文
            context = new ClassPathXmlApplicationContext("classpath*:beans.xml");
            context.start();
        }
        
        @AfterClass
        public static void setUpAfterClass()throws Exception{
            context.destroy();
        }
        
        /*下面的方法是用来适配有很多XML配置文件的项目,继承之后传入路径即可生成对应的context*/
        
        /*private ClassPathXmlApplicationContext context;
        
        private String springXmlpath;
        
        public UnitTestBase() {}
        
        public UnitTestBase(String springXmlpath){
            this.springXmlpath = springXmlpath;
        }
        
        @Before
        public void berfore()
        {
            if(StringUtils.isEmpty(springXmlpath))
            {
                springXmlpath = "classpath*:spring-*.xml";
            }
            try {
                context = new ClassPathXmlApplicationContext(springXmlpath.split("[,\s]+"));
                context.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        
        @After
        public void after()
        {
            context.destroy();
        }
        
        @SuppressWarnings("unchecked")
        protected <T extends Object> T getBean(String beanId) {
            return (T)context.getBean(beanId);
        }
        
        protected <T extends Object> T getBean(Class<T> clazz) {
            return context.getBean(clazz);
        }
        */
    }

    然后选择对于你要新建单元测试的类按照下面的图操作

    QQ截图20160327225334

    QQ截图20160327225359

    QQ截图20160327225520

    QQ截图20160327225534

    这里只是演示一下,一般不直接对实现类做测试,直接对接口来测试,一般测试的是服务层的接口和持久层的接口

    下面是测试的代码

    import org.junit.Test;
    
    import com.xxx.newSystem.utils.UnitTestBase;//导入之前的工具类
    
    public class IUserServiceTest extends UnitTestBase {
    
        IUserService userService = (IUserService) context.getBean("userService");
        
        @Test
        public void testLogin() {
            System.err.println(userService.login("xex", "123456"));
        }
    
    }
    //这是利用工具类中注释掉的方法,用于有多个xml配置文件的时候做测试
    public class TestOneInterface extends UnitTestBase{
    
        public TestOneInterface(){
            super("classpath*:beans.xml");
        }
        
        @Test
        public void test()
        {
            IUserService userService = super.getBean("userService");
        
            System.err.println(userService.login("xx", "123456"));
        }
        
        
    }

    对于Junit4使用,网上的方法也有很多,注解的配置也有很多,我只是找我需要的。还是各取所需比较好,之后的项目我都会写单元测试的,做到真正的敏捷开发。

  • 相关阅读:
    Qt数据库应用13通用数据库分页
    Qt编写地图综合应用57跨平台(win、linux、mac、uos、kylin等)
    Qt编写可视化大屏电子看板系统24模块2当月计划
    Qt数据库应用11通用数据生成器
    Qt数据库应用12通用数据库清理
    Qt编写可视化大屏电子看板系统23模块1产量汇总
    Build your first app
    Migrate your app from Xamarin.Forms
    .NET MAUI Preview4 状态预览(5月)
    2021年总结
  • 原文地址:https://www.cnblogs.com/linkstar/p/5327363.html
Copyright © 2020-2023  润新知