boost-test应用程序初始化

时间:2010-01-05 08:32:07

标签: c++ unit-testing boost-test

我刚刚通过一个新的应用程序来说明了升压测试和单元测试,我不知道如何处理应用程序初始化(例如加载配置文件,连接数据库,启动嵌入式python解释器)等等。)

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

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

我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

看起来你打算做的是比单元测试更多的集成测试。它不是要指出措辞,而是有所作为。单元测试意味着测试方法隔离,在一个名为fixture的环境中,只为一个测试创建,然后结束然后删除。如果下一个案例需要相同的夹具,则将重新创建夹具的另一个实例。这样做是为了隔离测试,以便一次测试中的错误不会影响后续测试的结果。

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

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

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

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

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

与单元测试相比,这种方法有几个缺点:它依赖于配置文件(软件可能根据参数的不同而有所不同),数据库(关于其内容和连接到它的能力),测试不是孤立的......可以使用配置的默认值和在 test 模式下连接到测试数据库来克服这两个问题。

答案 1 :(得分:0)

您是否定义BOOST_TEST_MAIN?如果是这样,并且您没有自己的main函数(否则您将放置初始化代码),您可以使用某种形式的单例对象,它暴露出一个init函数,如果需要,可以在每次测试之前调用它。 / p>