`
eddysheng
  • 浏览: 111982 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于teamcity的持续集成实践(单元测试)

阅读更多

单元测试,是一种直接面向生产代码的测试,是一种白盒测试。

 

以前也写过那种超级简单的,就是依赖DB的基于dao或者service层接口的测试,简单的加载一些spring配置,然后开测。说实话,这样做有好处,最大的好处就是我知道这个接口可以运行了。仅此而已。

 

我对单元测试一直抱有抵触心态,可能跟周围同事的环境有关系,我没有发现说单元测试多么多么好的,反而发现有很多抱怨的,单元测试要做好难啊、单元测试费尽不讨好阿、单元测试太耗费时间啊。。。

 

我觉得单元测试最主要的是保证开发人员所写代码的可运行性就足够了,边界、路径、业务逻辑...大可以不写,那后面这些由什么保证呢?集成测试,我觉得集成测试完全可以覆盖这些。欢迎大家拍砖。

 

我们的项目曾经试验性的使用EasyMock结合junit写了几个单元测试,好坏我评价不了,大牛自己说太累了,哇,代码好多,一堆mock对象,而且还要对流程和代码极其熟悉。当然了,我们的大牛这几个单元测试,主要测得是业务逻辑的准确性,所以会导致乍一看,给人门槛很高的感觉。

 

先来看一个测试service的某种case的例子吧:

public class TestRegistrationService extends TestCase {

  ILogInfoDAO logInfoDAO = createMock(ILogInfoDAO.class);

  DaoManager daoMgr = createMock(DaoManager.class);

  public void initDaoManager(){
        reset();
        expect(daoMgr.getDao(ILogInfoDAO.class)).andReturn(logInfoDAO).anyTimes();
       
        daoMgr.startTransaction();
        daoMgr.commitTransaction();
        daoMgr.endTransaction();       
       
        DaoConfig dao=DaoConfig.getInstance();
        dao.setDaoManager(daoMgr);       
  }

  public void testAutoRegistrationServiceInvalidMSISDN() throws Exception{
        initDaoManager();
        logInfoDAO.addSelfRegisterHistory((RegistrationLogInfo) anyObject());
        expectLastCall().andDelegateTo(new  LogInfoDAOImpl(){
            @Override
            public void addSelfRegisterHistory(RegistrationLogInfo logInfo)
                    throws Exception {
                String desp=logInfo.getDescription();
                assertEquals(Constants.REGLOGINFO_INVALID_MSISDN_FORMAT, desp);
            }           
           
        });
        replay(daoMgr,deviceDAO,subscriberDAO,logInfoDAO,otherDAO,modelDAO,stateManagerDAO);
        RegistrationService service=new RegistrationService(1);
        try{
            service.autoRegistrationService("131612213", "IMEI:004401020858052", "NOKIA", "6670", "R533", "1", "1");
        }catch(DMCareException e){
            return;
        }
        assert(false);
        verify(daoMgr,deviceDAO,subscriberDAO,logInfoDAO,otherDAO,modelDAO,stateManagerDAO);
    }

}

这还只是一个service中的一种case,如果要覆盖全了,比真正的生产代码量不知道要大多少。

 

当然这样做也有好处,不需要容器和db依赖。

 

所以单元测试,到底是测什么?或者这么说,对于一个已经存在系统进行改造,单元测试该怎么写??

分享到:
评论

相关推荐

    Flex持续集成之单元测试

    Flex持续集成之单元测试是开发过程中一个至关重要的环节,它主要关注的是Flex应用程序的模块化测试,确保每个独立的代码单元都能正常工作。通过单元测试,开发者可以预先发现和修复问题,提高代码质量和稳定性,同时...

    teamcity-ant脚本.rar

    TeamCity是一款强大的持续集成(CI)/持续部署(CD)工具,它可以帮助开发团队自动构建、测试和部署软件。在TeamCity中,Ant脚本扮演着至关重要的角色,因为Ant是Java项目常用的构建工具,能够定义和执行构建过程。...

    软件工程中的软件测试自动化与持续集成1.pptx

    - **持续集成工具**:如Jenkins、Travis CI、TeamCity等,提供强大的CI/CD功能。 - **容器化**:通过容器技术实现应用的轻量化部署,便于管理和扩展。 - **自动化测试框架**:为自动化测试提供支持,提高测试效率。 ...

    teamcity-subproject-test

    TeamCity是一款流行的持续集成(CI)和持续部署(CD)工具,它允许开发者自动化构建、测试和部署软件。在这个项目中,"subproject"可能指的是在单个TeamCity配置中管理的多个独立但相互关联的代码库或组件。 描述中...

    cake-teamcity:TeamCity的蛋糕整合

    标题中的“cake-teamcity:TeamCity的蛋糕整合”指的是将Cake构建系统与TeamCity持续集成服务器进行集成的实践。Cake是一种基于.NET Framework的构建脚本语言,它使用C#语法,使得编写构建脚本变得更加简单和高效。而...

    TeamCity.Play

    TeamCity是一款功能强大的持续集成(CI)和持续部署(CD)服务器,主要应用于Java开发环境。它由JetBrains公司开发,旨在帮助软件开发团队提高代码质量和交付效率。TeamCity不仅支持Java,还能够处理多种编程语言和...

    自动化测试性能测试PDF教程

    - **持续集成工具**:如Jenkins、TeamCity等,可以与测试框架集成,实现自动化测试的持续运行。 ### 2. 性能测试基础 #### 2.1 性能测试的概念 性能测试旨在评估系统的性能特征,如响应时间、吞吐量、资源利用率等...

    team-city-first-test-project

    "Team City首测项目"是一个基于Python的持续集成与持续部署(CI/CD)实践案例。Team City是由JetBrains开发的一款强大的持续集成服务器,它能够自动化构建、测试和部署软件,确保代码的质量和项目的稳定性。在这个项目...

    行业分类-设备装置-一种基于Windows平台多服务器多应用的自动化测试方法.zip

    例如,可以采用Jenkins、TeamCity等持续集成工具来管理和调度这些测试任务,确保它们按照预定的顺序和条件执行。 多应用测试则需要考虑应用间的交互和依赖关系。测试过程中,不仅要确保单个应用的功能正确性,还要...

    example-teamcity

    `example-teamcity`是一个基于Java技术构建的示例项目,旨在展示如何配置和使用TeamCity作为一个持续集成和持续部署(CI/CD)工具。TeamCity是由JetBrains公司开发的一款强大的企业级CI/CD服务器,它能够自动化软件...

    某公司的测试系统

    2. **持续集成**:在C#测试系统中,持续集成工具如Jenkins或TeamCity可以帮助团队频繁地集成代码,确保每次代码更改后都能快速发现并修复问题。通过配置这些工具,可以在每次提交时自动运行测试,提供及时的反馈。 ...

    grunt-tslint-teamcity:带有 teamcity 记者的 TypeScript linter

    通过集成 TSLint 和 TeamCity,开发者可以更方便地在持续集成过程中捕获和报告 TypeScript 代码的质量问题。 Grunt 是一个基于任务的 JavaScript 构建工具,它允许开发者自动化诸如编译、测试、压缩等开发流程。`...

    NUnit 测试范例

    6. **持续集成**:NUnit可以轻松地集成到持续集成(CI)服务器,如Jenkins或TeamCity,确保每次构建时都运行测试。 ### 结论 NUnit作为.NET开发的重要辅助工具,帮助确保代码质量,通过自动化测试减少bug,并且随着...

    parasoft公司Jtest讲义(中文版)

    5. 连续集成集成:Jtest可与CI/CD工具如Jenkins、TeamCity集成,实现持续测试和质量监控,确保每次代码提交都经过验证。 总结,Parasoft公司的Jtest是Java开发人员的强大助手,它通过静态代码分析、智能测试生成和...

    CIDashboard:TeamCity资讯主页

    `CIDashboard`是一个基于`JavaScript`开发的项目,它为用户提供了关于TeamCity的定制化信息展示平台,也就是我们常说的持续集成(Continuous Integration, CI)系统的可视化界面。TeamCity是JetBrains公司推出的一款...

    ASP.NET3.5最佳实践

    - 持续集成:通过持续集成工具如Jenkins或TeamCity,自动化构建、测试和部署流程,减少手动错误。 5. **郑淑芬的练习题解答** - 通过郑淑芬提供的练习题解答,开发者可以进一步巩固和应用所学的ASP.NET 3.5知识,...

    周纪海-从 DevOps到DevSecOps的落地实践.pdf

    - 持续集成工具:如Jenkins、TeamCity,持续集成应用构建。 - 自动化配置和发布工具:如Ansible、Puppet、Chef,自动部署和配置管理。 - 构建工具:如Maven、Gradle、Ants,自动化项目构建。 - 监控预警工具:如...

    NUnitAspTest

    6. **持续集成友好**:NUnitAspTest 可以与其他持续集成工具(如Jenkins、TeamCity等)配合使用,自动执行测试,及时发现潜在问题。 **如何使用NUnitAspTest:** 1. **安装NUnit和NUnit扩展**:首先,你需要在你的...

    ASP.NET集成客户关系管理的企业网站的设计与开发(源代码+论文).rar

    7. **单元测试和持续集成**:为了确保代码质量和项目稳定性,开发者可能会使用Visual Studio的测试工具进行单元测试,并配合如Jenkins或TeamCity等工具进行持续集成。 8. **源代码版本控制**:在团队开发中,源代码...

Global site tag (gtag.js) - Google Analytics