我正在开发一个处理CTRL-C的应用程序。我正在生成一个信号处理程序来正常关闭线程和其他资源。
我想在我的应用程序可能的不同场景中测试CTRL-C。我知道如何为测试中的进程设置它们,但我需要一种方法(在运行的测试套件的代码中)来检查是否达到了这个条件,以便完全调用CTRL-C。
我在Linux工作,我希望在CPPUNIT
的帮助下自动运行我的测试。在我的每个CTRL-C测试中,我启动该过程,然后使用具有该过程的PID的kill
函数发送CTRL-C。
我正在使用共享内存;一旦测试的应用程序达到我感兴趣的条件或我想发送CTRL-C的点,我就会在共享内存中写入标记或状态。同时,在不同进程中运行的测试套件代码连续轮询共享内存,一旦它读取所需状态,它就会发送CTRL-C / kill。
您认为这是一种好方法还是通常以更好/更有效的方式完成?
亲切的问候
AFG
答案 0 :(得分:5)
首先测试接收到某些外部信号时的行为看起来不像是单元测试,而是像功能测试一样。
此外,你这样做也听起来太复杂,可能会强制某种同步并隐藏一些行为。
另一方面,对于这种测试,我并没有更好的建议,这通常是通过外部工具以更少控制的方式完成的。
答案 1 :(得分:2)
引入一个间接层。
Program
的类。)shutdown()
方法,该方法执行除调用std::exit()
之外的所有关闭操作。shutdown()
方法与任何其他方法一样。shutdown()
static
对象的Program
方法call std::exit()
。这是你无法进行单元测试的唯一部分。