代码之家  ›  专栏  ›  技术社区  ›  Fire Lancer

增压测试应用程序初始化

  •  1
  • Fire Lancer  · 技术社区  · 15 年前

    我只是用一个新的应用程序来描述Boost测试和单元测试,我不确定如何处理应用程序初始化(例如加载配置文件、连接到数据库、启动嵌入式python解释器等)。

    我想测试这个初始化过程,而且应用程序中的大多数其他模块都要求成功进行初始化。

    一些运行关闭代码的方法也会受到赞赏。

    我该怎么做呢?

    2 回复  |  直到 15 年前
        1
  •  2
  •   philant    15 年前

    似乎您打算做的更多是集成测试,而不是单元测试。这并不是要准确地指出措辞,而是要有所不同。单元测试平均测试方法 孤立地 在一个称为fixture的环境中,只为一个测试创建,结束然后删除。如果下一个案例需要相同的装置,则将重新创建装置的另一个实例。这样做是为了隔离测试,以便一个测试中的错误不会影响后续测试的结果。

    通常,一个测试有三个步骤:

    • 排列-准备夹具:实例化要测试的类,可能还需要其他对象
    • 调用要测试的方法
    • 断言-验证期望

    单元测试通常远离外部资源,如文件和数据库。相反 mock objects 用于满足要测试的类的依赖项。

    但是,根据应用程序的类型,您可以尝试从应用程序本身运行测试。这不是“纯”的单元测试,但无论如何都是有价值的,特别是如果代码没有在编写时考虑到单元测试,那么它可能不够“灵活”,无法进行单元测试。

    这需要一种特殊的执行模式,例如使用“-test”参数,该参数将正常初始化应用程序,然后调用将模拟输入的测试,并使用断言来验证应用程序是否按预期响应。同样,如果数据库连接已关闭(如果对象未被删除),则可以调用关闭代码并使用断言进行验证。

    与单元测试相比,这种方法有几个缺点:它取决于配置文件(软件的行为可能因参数而异)、数据库(取决于其内容和连接能力)、测试不孤立…前两个可以通过使用配置的默认值并连接到中的测试数据库来克服。 测试 模式。

        2
  •  0
  •   Rob    15 年前

    你在定义 BOOST_TEST_MAIN 是吗?如果是的话,你没有 main 您自己的函数(在这里您将放置初始化代码)可以使用某种形式的singleton对象,它公开了一个init函数,您可以在每次测试之前调用该函数(如果需要)。