簡體   English   中英

如何最好地讓我的 catch2 CHECK() 輸出更多關於它檢查的信息?

[英]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”一起打印,同時:

  1. 保持我的測試源代碼簡潔。
  2. 不重復自己
  3. 仍然獲得有效的文件和行號

?

注意:當前使用的 catch2 版本是 2.7.0,合並為一個標頭。 如果版本更改會有所幫助,那可能是可行的。

使用CAPTUREINFO日志記錄宏(請參閱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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM