zoukankan      html  css  js  c++  java
  • 自动化组件测试

    自动化组件测试

    “组件测试”或“子系统测试”验证系统的各个部分,可能需要安装整个系统或某些外部依赖关系,如数据库、文件系统或网络终端等。这些测试验证组件间的交互能产生预期的组合行为。典型的组件测试需要底层数据库支持,甚至可能跨越架构边界。因为每个测试用例执行的代码量更大,每个测试的代码覆盖率也更大,所以这些测试一般比单元测试执行的时间长。

    代码清单6-3展示了一个组件测试的例子,它利用DbUnit框架来生成数据库中的基底数据,然后尝试基于数据库中的内容找到数据。DbUnit使用了一些XML文件,它读入这些文件并将对应的数据插入到匹配的数据库表中。

    代码清单6-3  使用DbUnit的组件测试

    public class DefaultWordDAOImplTest extends DatabaseTestCase {

        protected IDataSet getDataSet() throws Exception {

            return new FlatXmlDataSet(new File("test/conf/wseed. xml"));

        }

     

        protected IDatabaseConnection getConnection() throws Exception {

            final Class driverClass =

                   Class.forName("org.gjt.mm.mysql.Driver");

            final Connection jdbcConnection =

            DriverManager.getConnection(

                "jdbc:mysql://localhost/words",

                "words", "words");

             return new DatabaseConnection(jdbcConnection);

        }

     

        public void testFindVerifyDefinition() throws Exception{

            final WordDAOImpl dao = new WordDAOImpl();

            final IWord wrd = dao.findWord("pugnacious");

            for(Iterator iter =

                   wrd.getDefinitions().iterator();

                                         iter.hasNext();){

                IDefinition def = (IDefinition)iter.next();

                TestCase.assertEquals(

                      "def is not Combative in nature; belligerent.",

                      "Combative in nature; belligerent.",

                      def.getDefinition());

            }

        }

        public DefaultWordDAOImplTest(String name) {

            super(name);

        }

    }

    组件级的测试比单元测试用到更多的依赖关系,但不一定像更高级的系统测试(稍后定义)用到的那么多。组件级的测试通过API来执行代码,但这些API可能暴露给客户,也可能不暴露给客户。在代码清单6-3中,主要通过暴露出的接口测试了数据访问对象(DAO)层的一个对象。另一个组件测试的例子通过StrutsTestCase框架测试了Struts架构中一个动作类,如代码清单6-4所示。这个测试明显需要一个数据库才能执行,但Web容器则是虚拟的,执行的API也不必暴露给客户。

    代码清单6-4  使用StrutsTest的组件测试

    public class ProjectViewActionTest extends DeftMeinMockStrutsTestCase {

       public void testProjectViewAction() throws Exception {

          this.addRequestParameter("projectId", "100");

          this.setRequestPathInfo("/viewProjectHistory");

          this.actionPerform();

          this.verifyForward("success");

     

            Project project = (Project)this.getRequest()

              .getAttribute("project");

                assertNotNull(project);

                assertEquals(project.getName(), "DS");

      }

     

      protected String getDBUnitDataSetFileForSetUp() {

          return "dbunit-seed.xml";

      }

     

      public ProjectViewActionTest(String name) {

          super(name);

      }

    }

    在代码清单6-4中,StrutsTestCase框架与DbUnit一起提供了向数据库填充基底数据的功能和一个虚拟的容器。DeftMeinMockStrutsTestCase类是一个模板,它要求实现getDBUnitDataSetFileForSetUp方法。

    这种类型的测试也被称为“集成测试”。这种类型的测试与系统测试的不同之处在于,集成测试(或组件测试、子系统测试)并不总是执行那些期望公开的API。例如,系统测试可以通过Web应用程序的Web页面执行它,但组件测试可以执行应用程序Web页面底下的业务层。

     

    本文节选自《持续集成:软件质量改进和风险降低之道》一书

    图书详细信息:

    http://www.cnblogs.com/broadview/archive/2012/06/13/2548150.html

    []Paul M. Duvall (保罗.M. 杜瓦尔)Steve Matyas (史蒂夫.迈耶斯) Andrew Glover(安德鲁.格洛弗

    王海鹏 

    电子工业出版社出版

  • 相关阅读:
    ArcGIS 10与ArcEngine 10安装及破解
    SQL Server:触发器详解
    sql事务(Transaction)用法介绍及回滚实例
    Brief Tour of the Standard Library
    Python Scopes and Namespaces
    Saving structured data with json
    Packages
    “Compiled” Python files
    Executing modules as scripts
    More on Conditions
  • 原文地址:https://www.cnblogs.com/broadview/p/2553751.html
Copyright © 2011-2022 走看看