2010-12-21 55 views
8

我正在开发处理CTRL-C的应用程序。我正在生产一个信号处理程序来正常关闭线程和其他资源。发送给应用程序的CTRL-C的单元测试

我想在我的应用程序可能在不同的情况下测试CTRL-C。我知道如何为被测试的进程设置这些参数,但我需要一种方法(在运行测试套件的代码中)来检查是否达到了该条件,或者不准确调用CTRL-C。

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

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

您认为这是一个好方法,还是通常以更好/有效的方式完成?当接收到一些外部信号不像单元测试,但像功能测试

此致

AFG

+0

可能重复的[为什么我不能导致seg故障?](http://stackoverflow.com/questions/2045314/why-cant-i-cause-a-seg-fault) – 2010-12-21 20:15:28

回答

5

首先测试行为。

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

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

+0

我看到你是什​​么意思。一些“太复杂”的代码也反对。你是什​​么类型的工具?这些免费/开放源代码? – 2010-12-21 16:10:05

+0

+1测试信号处理程序听起来像我的功能测试。 – 2010-12-21 16:38:47

2

引入间接级别。

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