发送到应用程序的CTRL-C的单元测试

时间:2010-12-21 15:22:26

标签: c++ unit-testing testing signals

我正在开发一个处理CTRL-C的应用程序。我正在生成一个信号处理程序来正常关闭线程和其他资源。

我想在我的应用程序可能的不同场景中测试CTRL-C。我知道如何为测试中的进程设置它们,但我需要一种方法(在运行的测试套件的代码中)来检查是否达到了这个条件,以便完全调用CTRL-C。

我在Linux工作,我希望在CPPUNIT的帮助下自动运行我的测试。在我的每个CTRL-C测试中,我启动该过程,然后使用具有该过程的PID的kill函数发送CTRL-C。

我正在使用共享内存;一旦测试的应用程序达到我感兴趣的条件或我想发送CTRL-C的点,我就会在共享内存中写入标记或状态。同时,在不同进程中运行的测试套件代码连续轮询共享内存,一旦它读取所需状态,它就会发送CTRL-C / kill。

您认为这是一种好方法还是通常以更好/更有效的方式完成?

亲切的问候

AFG

2 个答案:

答案 0 :(得分:5)

首先测试接收到某些外部信号时的行为看起来不像是单元测试,而是像功能测试一样。

此外,你这样做也听起来太复杂,可能会强制某种同步并隐藏一些行为。

另一方面,对于这种测试,我并没有更好的建议,这通常是通过外部工具以更少控制的方式完成的。

答案 1 :(得分:2)

引入一个间接层。

  1. 将您的高级程序代码放在Facade后面(我使用名为Program的类。)
  2. 让Facade提供shutdown()方法,该方法执行除调用std::exit()之外的所有关闭操作。
  3. 单元测试shutdown()方法与任何其他方法一样。
  4. 让信号处理程序委托代表整个程序的shutdown() static对象的Program方法call std::exit()。这是你无法进行单元测试的唯一部分。