我想寫一個序列化方法的單元測試。通過序列化方法,我的意思是將一組數據輸出爲特殊格式的方法。如何單元測試生成器/序列化方法?
例如,以XML格式輸出數據的方法。 (我使用C++,但它是在每一種語言相同。)
class Generator
{
public:
std::string serialize();
};
// unit test (pseudo-code)
Generator gen;
// set some data in gen
std::string actual = gen.serialize();
std::string expected = "<xml>...</xml>";
ASSERT_EQUAL(expected, actual);
這樣做的問題是,單元測試是高度依賴於非重要的事情,如XML的格式(換行符)或者XML屬性的順序。
雖然使用XML,以前的方法將起作用,但它不適用於輸出二進制數據的生成器。
那麼,測試序列化方法的強大方法是什麼?
我的想法如下,但都有嚴重的缺陷。
- 使用外部庫解析數據(專有格式,可能不存在)。
- 總是寫入序列化/反序列化對並組合測試它們(兩種方法中的錯誤都可能未被發現)。
- 將序列化數據存儲在外部文件中並在測試中與它們進行比較(單元測試難以讀取和維護)。
就我個人而言,我更喜歡做成對測試的第二種選擇。在串行器和反串行器中出現錯誤的可能性很小,我會說。如果你在serialiser中有一個bug,當你反序列化和驗證這個對象的時候你可能會發現它 – 2014-11-02 15:39:40