如何對用OpenCV開發的API進行測試 (Google Test 版本)
- 如何對用OpenCV開發的API進行測試
- 斷言介紹
- 斷言
- 基礎的斷言
- 數值比較
- 字符串比較
如何對用OpenCV開發的API進行測試
假設你想測試一個使用OpenCV開發的圖像處理API,例如一個圖像濾波函數。以下是一種測試方法的示例:
-
準備測試環境:首先,需要安裝OpenCV庫,并設置好C++開發環境。
-
編寫測試代碼:創建一個新的C++文件,引入必要的OpenCV頭文件和測試框架頭文件(如Google Test)。
#include <opencv2/opencv.hpp> #include <gtest/gtest.h>// 測試函數原型聲明 cv::Mat customImageFilter(const cv::Mat &inputImage);TEST(ImageFilterTest, BasicFiltering) {// 準備測試數據cv::Mat inputImage = cv::Mat::ones(100, 100, CV_8UC1) * 255; // 創建一個100x100的全白圖像cv::Mat expectedResult = ...; // 根據你的濾波邏輯定義預期結果// 調用待測試的圖像處理APIcv::Mat result = customImageFilter(inputImage);// 驗證結果EXPECT_EQ(expectedResult.size(), result.size());for (int i = 0; i < result.rows; ++i) {for (int j = 0; j < result.cols; ++j) {EXPECT_EQ(expectedResult.at<uchar>(i, j), result.at<uchar>(i, j));}} }int main(int argc, char **argv) {::testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS(); }
-
編譯和運行測試:使用合適的編譯器編譯測試代碼,并運行測試。測試框架會自動執行所有測試用例,并報告測試結果。
斷言介紹
斷言
gtest 使用一系列斷言的宏來檢查值是否符合預期,主要分為兩類:ASSERT 和 EXPECT。區別在于 ASSERT 不通過的時候會認為是一個 fatal 的錯誤,退出當前函數(只是函數)。而 EXPECT 失敗的話會繼續運行當前函數,所以對于函數內幾個失敗可以同時報告出來。通常我們用 EXPECT 級別的斷言就好,除非你認為當前檢查點失敗后函數的后續檢查沒有意義。
基礎的斷言
Fatal assertion | Nonfatal assertion | Verifies |
---|---|---|
ASSERT_TRUE( condition) ; | EXPECT_TRUE( condition) ; | condition is true |
ASSERT_FALSE( condition) ; | EXPECT_FALSE( condition) ; | condition is false |
數值比較
Fatal assertion | Nonfatal assertion | Verifies |
---|---|---|
ASSERT_EQ( val1, val2); | EXPECT_EQ( val1, val2); | val1 == val2 |
ASSERT_NE( val1, val2); | EXPECT_NE( val1, val2); | val1 != val2 |
ASSERT_LT( val1, val2); | EXPECT_LT( val1, val2); | val1 < val2 |
ASSERT_LE( val1, val2); | EXPECT_LE( val1, val2); | val1 <= val2 |
ASSERT_GT( val1, val2); | EXPECT_GT( val1, val2); | val1 > val2 |
ASSERT_GE( val1, val2); | EXPECT_GE( val1, val2); | val1 >= val2 |
字符串比較
Fatal assertion | Nonfatal assertion | Verifies |
---|---|---|
ASSERT_STREQ( str1, str2); | EXPECT_STREQ( str1, _str_2); | the two C strings have the same content |
ASSERT_STRNE( str1, str2); | EXPECT_STRNE( str1, str2); | the two C strings have different content |
ASSERT_STRCASEEQ( str1, str2); | EXPECT_STRCASEEQ( str1, str2); | the two C strings have the same content, ignoring case |
ASSERT_STRCASENE( str1, str2); | EXPECT_STRCASENE( str1, str2); | the two C strings have different content, ignoring case |