![](/img/trans.png)
[英]How do I make my cmake targets for catch2 testing and project running more extendable and sensible?
[英]How to best make my catch2 CHECK() output more informative about what it checks?
我正在使用 catch2 編寫一些帶有單元測試的代碼(出於某種原因,它將保持這種狀態)。
現在,在一組單元測試中,有很多(成對)行看起來像這樣:
T t1;
t1 = foo(some, params, here);
CHECK(my_compare(t1, T{some_literal}));
因此, my_out_param
是使用單個函數調用設置的,然后將其與 T 文字進行比較。
現在,當它運行並失敗時,我得到:
/path/to/test.cpp:493: Failure:
CHECK(my_compare(t1, T{some_literal}));
with expansion:
false
但顯然我沒有得到“一些,參數,這里”。 嗯,我需要它。 否則,如果不閱讀源代碼,我真的不知道哪個測試失敗了。
由於這里依賴於宏,我不能只將CHECK()
包裝在一個函數中並在里面做一些花哨的事情。
當檢查失敗時,您會建議我做什么以使“some, params, here”與“some_literal”一起打印,同時:
?
注意:當前使用的 catch2 版本是 2.7.0,合並為一個標頭。 如果版本更改會有所幫助,那可能是可行的。
使用CAPTURE
或INFO
日志記錄宏(請參閱https://github.com/catchorg/Catch2/blob/devel/docs/logging.md#streaming-macros )。
CAPTURE(some);
CAPTURE(params);
CAPTURE(here);
或者
INFO("Params: some="<<some<<", params="<<params<<", here="<<here);
應該做的伎倆。
BTW CAPTURE
僅記錄在與失敗測試相同的部分中捕獲的變量。 例子:
SECTION("foo"){
int i = 1;
CAPTURE(i);
CHECK(i==1);
}
SECTION("bar"){
int j = 2;
CAPTURE(j);
CHECK(j==1);
}
輸出
foo.cpp:10: FAILED:
CHECK( j==1 )
with expansion:
2 == 1
with message:
j := 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.