2010-12-21 20 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()。這是你不能進行單元測試的唯一部分。