2013-05-03 49 views
1

我正在爲處理數據轉換的規範編寫參考實現。從CPPunit測試用例中爲規範生成參考測試文件

我有很多的測試用例檢查數據越來越向前和向後適當改造,是這樣的:

void test(){ 
    int x[maxTest], y[maxTest], z[maxTest]; 
    fillRandomly(x, testSize); 

    MyTransform trans = MyTransform(testsize); 

    trans.apply(x, testSize, y); 
    trans.remove(y, testSize, z); 

    for(int i = 0; i < testSize; i++) 
     CPPUNIT_ASSERT(abs(x[i] - z[i]) < 2); 
} 

數據類型測試用例和變換之間的差異很大。

我想生成的是包含輸入/輸出和中間階段的文件,以便進一步的實現可以驗證其結果。

有幾個明顯的方法可以使這項工作(例如,命名輸出文件並對其中的所有內容進行命名),但其中大多數意味着要回到每個測試用例和一大堆複製粘貼。

來自Java,自省想到一個包裝來解決我的一些問題(自動命名測試輸出文件...),但不是所有的,我建議遠離它在C++(意見歡迎)。

泛型應用/刪除方法似乎也是一個很好的候選人,但不會那麼容易,因爲沒有抽象變換類型和變換之間很少符合(可能仍然是一個不錯的選擇,因爲沒有很多類型的變換)。

所以我想知道你們中的任何一個人是否必須做類似的事情以及如何解決它。我不介意修改所有的測試用例,如果這意味着以後我可以乾淨一些。

任何輸入將不勝感激。

+0

你想在這些文件中再次存儲什麼? – 2013-05-03 11:43:10

+0

[Boost.Serialization](http://www.boost.org/libs/serialization/doc/index.html)有用嗎? – 2013-05-03 11:50:01

+0

在文件中,我想存儲輸入數據和每個變換的輸出數據,在這種情況下,x和z。這種方式在重新實現時很容易確保一切都是正確的。序列化並不真正適合我的需求。 – 2013-05-03 12:39:58

回答

0

你所描述的並不是真正的單元測試,因此CppUnit本身可能不是你的最佳選擇。

看起來你正在嘗試做三件獨立的事情,但將它們結合在一起做到了一次。您想要運行單元測試,想要生成測試數據,並且想要驗證程序是否適用於生成的數據,並且您試圖在單個單元測試框架內完成這些操作。但是因爲它做得太多了,你會發現很難重用。

考慮簡化爲三個總測試的應用程序:一個CppUnit的測試套件,只執行單元測試(這些測試應該什麼都沒有做測試數據的文件);測試數據生成器;和一個轉換測試器。每次構建時都應該運行自動化單元測試。當您運行數據生成器,你應該自動上輸出,以確保你已經生成好的數據的數據測試的執行。然後,您可以將已知的測試數據和測試人員應用程序交付給客戶。