我只是对新应用程序的 boost-test 和单元测试进行了说明,我不确定如何处理应用程序初始化(例如加载配置文件、连接到数据库、启动嵌入式 python 解释器等) .
我想测试这个初始化过程,并且应用程序中的大多数其他模块都要求初始化成功发生。
一些运行一些关闭代码的方法也将不胜感激。
我该怎么做呢?
我只是对新应用程序的 boost-test 和单元测试进行了说明,我不确定如何处理应用程序初始化(例如加载配置文件、连接到数据库、启动嵌入式 python 解释器等) .
我想测试这个初始化过程,并且应用程序中的大多数其他模块都要求初始化成功发生。
一些运行一些关闭代码的方法也将不胜感激。
我该怎么做呢?
似乎您打算做的更多的是集成测试而不是单元测试。这不是要精确措辞,但它会有所作为。单元测试意味着孤立的测试方法,在称为夹具的环境中,仅为一个测试创建,结束然后删除。如果下一个案例需要相同的夹具,则将重新创建夹具的另一个实例。这样做是为了隔离测试,以便一个测试中的错误不会影响后续测试的结果。
通常,一项测试包含三个步骤:
单元测试通常远离外部资源,例如文件和数据库。相反,模拟对象用于满足要测试的类的依赖关系。
但是,根据应用程序的类型,您可以尝试从应用程序本身运行测试。这不是“纯粹的”单元测试,但无论如何都是有价值的,特别是如果编写代码时没有考虑到单元测试,它可能不够“灵活”,无法进行单元测试。
这需要一种特殊的执行模式,例如带有“-test”参数,它将正常初始化应用程序,然后调用将模拟输入的测试并使用断言来验证应用程序是否按预期做出反应。同样,如果数据库连接已关闭(如果对象未被删除),则可以调用关闭代码并使用断言进行验证。
与单元测试相比,这种方法有几个缺点:它依赖于配置文件(软件可能会根据参数的不同表现不同),依赖于数据库(依赖于其内容和连接到它的能力),测试不是孤立的... 可以使用配置的默认值并在测试模式下连接到测试数据库来克服前两个问题。
你在定义BOOST_TEST_MAIN
吗?如果是这样,并且您没有main
自己的函数(否则您将在其中放置初始化代码),您可以使用某种形式的单例对象,该对象公开一个 init 函数,如果需要,您可以在每次测试之前调用该函数。