99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

GoogleTest入門指南:C++單元測試框架集成、斷言與CI實踐

GoogleTest入門指南:C++單元測試框架集成、斷言與CI實踐 GoogleTest 這個名字做 C 開發(fā)的人應該不陌生。它是 Google 開源的 C 單元測試框架GitHub 倉庫地址是google/googletest項目里同時包含兩大組件gtest負責測試用例編寫和運行gmock負責行為模擬通常合稱 GoogleTest / Google Mock。這個項目從 2008 年對外發(fā)布一直維護到現(xiàn)在許可證是 BSD 3-Clause商用友好也是目前 C 社區(qū)使用面最廣的測試框架之一。它的核心能力可以概括成一句話用 C 原生語法寫斷言、建測試夾具、做參數(shù)化測試、驗證進程崩潰行為、模擬外部依賴然后輸出一份 CI 能解析的報告。硬件層面基本沒有門檻不需要 GPU不需要特殊設備只要有一臺能編譯 C 的機器就能跑。真正影響體驗的反而是幾個工程問題怎么引入依賴、怎么組織用例、怎么接入 CTest、怎么處理鏈接錯誤。這篇文章會把 GoogleTest 從“拉到代碼”到“跑進 CI”的全過程拆開講包括 CMake 集成、斷言和夾具怎么寫、參數(shù)化測試和死亡測試怎么用、gMock 怎么模擬外部接口、測試報告怎么輸出、常見的編譯和鏈接問題怎么排查。看完之后你可以直接給一個現(xiàn)有 C 工程補上一套可維護、可批量執(zhí)行、可接 CI 的單元測試體系。1. 核心能力速覽先把 GoogleTest 的規(guī)格放在前面方便你快速判斷這個項目和你的場景匹不匹配。能力項說明項目類型C 單元測試框架含 gtest 與 gmock 兩部分開源來源Google 主導GitHub 倉庫google/googletest許可證BSD 3-Clause商用和二次開發(fā)相對寬松主要功能斷言、測試夾具、參數(shù)化測試、類型化測試、死亡測試、gMock 行為模擬支持平臺Linux、macOS、Windows以及 Android NDK 等交叉編譯場景編譯器要求GCC / Clang / MSVC 主流版本具體以目標版本 Release Notes 為準構建方式CMake、Bazel社區(qū)也維護 vcpkg、Conan 等包管理接入C 標準較早版本支持 C11新版本建議 C14 及以上按實際拉取版本確認報告輸出支持 XML、JSON 測試報告供 Jenkins、GitHub Actions 等 CI 解析批量能力支持過濾器、隨機順序、重復執(zhí)行、分片運行可配合 CTest 并行硬件門檻無特殊要求普通 CPU 即可Googletest 本身占用磁盤空間很小如果你是做 C 庫開發(fā)、算法模塊開發(fā)、SDK 回歸測試或者正在給老項目補測試GoogleTest 基本是零成本起步的第一選擇。2. 適用場景與使用邊界GoogleTest 最典型的落地場景是單元測試和組件級回歸測試。比如你寫了一個字符串解析函數(shù)、一個內(nèi)存池、一個 RPC 客戶端封裝這些模塊邊界清晰、輸入輸出可預期非常適合用TEST或TEST_F寫一批斷言鎖住行為。后續(xù)重構時跑一遍全量用例能非常明確地發(fā)現(xiàn)“哪個改動把哪個行為改壞了”。它同樣適合作為 CI 的質(zhì)量門禁。通過 CTest 集成后每個提交都可以自動編譯并運行全部測試失敗時輸出--output-on-failure對應的日志并給出 XML/JSON 報告。配合--gtest_shard系列參數(shù)還能把測試拆到多個 CI 節(jié)點上并行跑解決“測試數(shù)量大、單節(jié)點跑太久”的問題。但也要注意邊界。GoogleTest 解決的是“函數(shù)和類的行為是否正確”這一類問題不適合做完整鏈路 E2E 測試不適合做 GUI 自動化也不適合替代壓測工具??邕M程、跨網(wǎng)絡、依賴真實環(huán)境的場景更適合用專門的集成測試框架或腳本去覆蓋。單元測試只能證明“你測過的輸入”行為正確測不到的組合依然可能藏 bug所以它不能替代代碼審查和手工驗證。另外要提一下合規(guī)問題。測試代碼和被測試代碼一樣也存在許可證和隱私邊界。如果你在項目里二次分發(fā) GoogleTestBSD 3-Clause 要求保留版權聲明和免責條款這個要注意。測試中使用的輸入數(shù)據(jù)、Mock 數(shù)據(jù)、日志樣本也必須確認來源合法不要拿未授權的真實用戶數(shù)據(jù)或版權內(nèi)容直接塞進測試倉庫。3. 環(huán)境準備與前置條件GoogleTest 不是一個獨立運行的軟件它是一套需要鏈接進你測試程序的庫。所以“環(huán)境準備”實際包括三部分編譯器工具鏈、構建系統(tǒng)、依賴獲取方式。操作系統(tǒng)方面Linux、macOS、Windows 都支持。編譯器建議用較新的穩(wěn)定版本GCC、Clang、MSVC 都可以。CMake 版本建議 3.14 以上因為用FetchContent拉取 GoogleTest 需要新版 CMake 的支持如果你只是想手動 clone 源碼再編譯CMake 版本要求會寬松一些。前置工具清單如下Git用于拉取 googletest 源碼。CMake 3.14用于構建和測試發(fā)現(xiàn)??捎玫?C 編譯器例如 GCC、Clang 或 MSVC。一個已有的 C 項目或者一個用來試驗的空工程。磁盤占用不用擔心。googletest 源碼本身在幾十 MB 量級構建產(chǎn)物也不會像深度學習框架那樣動輒幾個 GB。你只需要在網(wǎng)絡正常的前提下保證能訪問 GitHub 倉庫。如果你想用包管理器也可以提前裝好 vcpkg 或 Conan。vcpkg 下直接執(zhí)行vcpkg install gtest就能拿到測試庫Conan 里也有對應的gtest包具體版本以你自己的包管理器源為準。有一點需要注意Linux 發(fā)行版自帶的libgtest-dev通常版本偏舊而且部分發(fā)行版只提供源碼需要自己用 CMake 編譯一次。為了鎖定版本、保證 CI 和本地環(huán)境一致我更推薦用 CMake 的FetchContent方式。4. 安裝部署與構建方式4.1 用 CMake FetchContent 引入這是目前最推薦的接入方式。在CMakeLists.txt里聲明依賴CMake 會自己拉取源碼、構建靜態(tài)庫、導出 CMake Target整個過程不需要手動去裝系統(tǒng)包。cmake_minimum_required(VERSION 3.14) project(MyApp CXX) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG v1.15.2 ) FetchContent_MakeAvailable(googletest) enable_testing() add_executable(unit_tests test_main.cpp test_math.cpp test_stack.cpp ) target_link_libraries(unit_tests PRIVATE GTest::gmock_main GTest::gmock GTest::gtest ) include(GoogleTest) gtest_discover_tests(unit_tests)這里有兩個細節(jié)要說清楚。第一GIT_TAG填的v1.15.2是當前常見的穩(wěn)定版標簽實際使用前一定要去 GitHub Releases 頁面確認你要鎖定的版本如果只想用最新主干可以直接填main但穩(wěn)定性不如固定 tag。第二鏈接目標GTest::gtest_main會提供一個默認main函數(shù)它會自動初始化 GoogleTest 并調(diào)用RUN_ALL_TESTS()所以你不需要自己寫入口。GTest::gmock_main則是同時支持 gMock 的入口版本功能上是 gtest_main 的超集建議在包含 Mock 用例時直接用它。gtest_discover_tests(unit_tests)的作用是讓 CTest 能枚舉到可執(zhí)行文件里的每一個測試用例。這樣你執(zhí)行ctest時每個TEST都會變成 CTest 的一個獨立測試項輸出粒度更細比“整個二進制跑一遍只輸出一個 PASS/FAIL”好用得多。4.2 手動 clone 源碼構建如果你不想在 CMake 里自動拉取也可以把 googletest 單獨 clone 下來構建。git clone https://github.com/google/googletest.git cd googletest mkdir build cd build cmake .. cmake --build .構建完成之后會在build/lib下生成靜態(tài)庫文件常見的是libgtest.a、libgtest_main.a、libgmock.a、libgmock_main.a。之后你的測試程序手動鏈接這些庫即可。這種方式適合需要把 googletest 做成公共依賴、或者公司內(nèi)網(wǎng)無法直接訪問 GitHub 的場景。4.3 編寫第一個測試用例現(xiàn)在寫一個最簡單的測試文件test_math.cpp#include gtest/gtest.h int Add(int a, int b) { return a b; } TEST(AddTest, HandlesPositiveInput) { EXPECT_EQ(Add(1, 2), 3); EXPECT_GT(Add(2, 3), 4); } TEST(AddTest, HandlesNegativeInput) { EXPECT_EQ(Add(-1, -2), -3); EXPECT_LE(Add(0, 0), 0); }如果沒有鏈接GTest::gtest_main你需要自己提供main#include gtest/gtest.h int main(int argc, char** argv) { ::testing::InitGoogleTest(argc, argv); return RUN_ALL_TESTS(); }編譯運行cmake -S . -B build cmake --build build ctest --test-dir build --output-on-failure看到輸出里有PASSED或者[ PASSED ] 2 tests.說明你的 GoogleTest 環(huán)境已經(jīng)跑通了。這是整個接入流程最關鍵的一步后續(xù)所有功能都是在“能編譯、能運行、能輸出報告”的基礎上展開的。5. 功能測試與效果驗證5.1 斷言EXPECT_ 與 ASSERT_GoogleTest 的斷言分為兩大類EXPECT_*失敗后繼續(xù)執(zhí)行當前測試ASSERT_*失敗后立刻終止當前測試。原則是可恢復的檢查用EXPECT_一旦失敗后面就沒意義的致命條件用ASSERT_。常用斷言從語義上分這么幾組斷言作用EXPECT_EQ / EXPECT_NE判斷相等 / 不相等EXPECT_LT / EXPECT_LE / EXPECT_GT / EXPECT_GE大小比較EXPECT_TRUE / EXPECT_FALSE布爾判斷EXPECT_FLOAT_EQ / EXPECT_DOUBLE_EQ / EXPECT_NEAR浮點數(shù)比較避免直接的精度問題EXPECT_STREQ / EXPECT_STRNE比較const char*指向的字符串內(nèi)容注意不是指針地址EXPECT_THROW / EXPECT_NO_THROW / EXPECT_ANY_THROW驗證是否拋出指定異常 / 不拋異常 / 拋任意異常實際寫的時候有一個很常見的坑用EXPECT_EQ去比較兩個char*結果比較的是指針地址永遠不一致。這種情況要換成EXPECT_STREQ。C 里的std::string重載了用EXPECT_EQ沒問題但原生char*必須走EXPECT_STREQ系列。5.2 測試夾具TEST_F當多個測試用例需要相同的準備和清理邏輯時可以用測試夾具。定義一個繼承自::testing::Test的類在SetUp()里做初始化在TearDown()里做清理然后所有TEST_F會自動共享這套流程。#include gtest/gtest.h #include vector class VectorTest : public ::testing::Test { protected: void SetUp() override { data {3, 1, 4, 1, 5}; } void TearDown() override { data.clear(); } std::vectorint data; }; TEST_F(VectorTest, SizeMatches) { EXPECT_EQ(data.size(), 5); } TEST_F(VectorTest, FirstElementIsThree) { EXPECT_EQ(data[0], 3); }每個TEST_F執(zhí)行前都會新建一個夾具對象跑完再銷毀所以同一個夾具下的用例之間天然隔離不存在“上一個用例改壞了成員變量影響下一個用例”的問題。注意TEST_F的第一個參數(shù)必須是已定義的夾具類名不能是普通字符串。如果整個測試套件只需要做一次的重型初始化可以用SetUpTestSuite()和TearDownTestSuite()它們對應的是測試套件級別的鉤子加載模型、分配大內(nèi)存這類操作適合放這里。5.3 參數(shù)化測試TEST_P參數(shù)化測試解決的是“同一段邏輯要驗證多組輸入”的問題。你把測試邏輯寫一遍然后通過參數(shù)生成器批量喂數(shù)據(jù)。class IsPositiveTest : public ::testing::TestWithParamint { }; TEST_P(IsPositiveTest, ChecksPositiveValue) { int value GetParam(); EXPECT_GT(value, 0); } INSTANTIATE_TEST_SUITE_P( PositiveValues, IsPositiveTest, ::testing::Values(1, 3, 5, 8, 100) );運行后CTest 里會出現(xiàn) 5 個獨立用例分別是PositiveValues/IsPositiveTest.ChecksPositiveValue/0到/4。如果某個參數(shù)組合失敗報告會直接指出是第幾組數(shù)據(jù)不需要自己去日志里翻。參數(shù)生成器除了Values還有Range、ValuesIn、Combine等分別適合離散枚舉、連續(xù)區(qū)間和多個參數(shù)笛卡爾積組合。這個能力對邊界值測試特別有用比如你有一個函數(shù)要驗證空字符串、超長字符串、特殊字符等二十種輸入用TEST_P寫一次邏輯就夠了。5.4 類型化測試TYPED_TEST如果被測代碼是模板類需要針對int、double、float等多組類型做測試可以用類型化測試。TYPED_TEST_SUITE聲明要測試的模板類型列表TYPED_TEST里用TypeParam代表當前類型。template typename T class NumericTest : public ::testing::Test { }; using NumericTypes ::testing::Typesint, float, double; TYPED_TEST_SUITE(NumericTest, NumericTypes); TYPED_TEST(NumericTest, CanConstructAndCompare) { TypeParam value TypeParam(1); EXPECT_TRUE(value 0); }這個功能的價值在于模板代碼往往在實例化時才會暴露類型相關的問題。你手動寫三份重復測試很容易漏掉其中一個類型TYPED_TEST把類型列表集中管理加類型只是改一行聲明的事。5.5 死亡測試EXPECT_DEATH死亡測試用來驗證“程序在特定輸入下會崩潰、會 abort、會以非零碼退出”常用于檢查空指針、越界等不可恢復的錯誤分支。#include gtest/gtest.h #include cstdlib void Foo(int* p) { if (p nullptr) { std::abort(); } } TEST(FooDeathTest, DiesOnNullPointer) { EXPECT_DEATH(Foo(nullptr), .*); }EXPECT_DEATH的第一個參數(shù)是要執(zhí)行的語句第二個參數(shù)是正則需要匹配子進程輸出到 stderr 的內(nèi)容。上面的.*只表示“隨意匹配”實際項目中建議寫成能對應錯誤信息關鍵字的正則這樣失敗時一眼能看出是哪個斷言沒觸發(fā)。死亡測試的實現(xiàn)依賴子進程能力POSIX 平臺用forkWindows 平臺創(chuàng)建子進程。因此它的執(zhí)行開銷比普通測試高一些不要在一個測試套件里堆幾千個死亡測試。另外在部分調(diào)試器環(huán)境里死亡測試可能表現(xiàn)異常排查時可以先單獨運行該用例觀察輸出。5.6 行為模擬gMockgMock 用來模擬被測代碼的外部依賴。它不關心這個類怎么實現(xiàn)只定義“當外部依賴被調(diào)用時返回什么、調(diào)用幾次、按什么順序”。以下面這個例子為例DataLoader是外部依賴MockDataLoader用 gMock 模擬了它的行為#include gmock/gmock.h #include string class DataLoader { public: virtual ~DataLoader() default; virtual int Load(const std::string key) 0; }; class MockDataLoader : public DataLoader { public: MOCK_METHOD(int, Load, (const std::string key), (override)); }; TEST(MockDemo, ReturnsFixedValue) { MockDataLoader loader; EXPECT_CALL(loader, Load(user)) .WillOnce(::testing::Return(42)); EXPECT_EQ(loader.Load(user), 42); }這段代碼驗證的核心不是返回值本身而是“被測代碼調(diào)用了Load(user)”這個行為被真實發(fā)生。gMock 還支持Times指定調(diào)用次數(shù)、WillRepeatedly指定多次返回值、InSequence指定調(diào)用順序能力比單純寫樁函數(shù)強很多。它特別適合測試網(wǎng)絡客戶端、數(shù)據(jù)庫訪問層、文件系統(tǒng)操作這類不方便在單測里連真實環(huán)境的模塊。6. 運行、批量執(zhí)行與 CI 集成6.1 常用運行參數(shù)GoogleTest 的可執(zhí)行文件支持一組以--gtest_開頭的運行參數(shù)。這些參數(shù)在本地調(diào)試和 CI 排障時非常關鍵。# 列出所有測試用例不執(zhí)行 ./build/unit_tests --gtest_list_tests # 只運行某個測試套件 ./build/unit_tests --gtest_filterVectorTest.* # 運行多個套件排除死亡測試 ./build/unit_tests --gtest_filterVectorTest.*:-*DeathTest* # 隨機順序跑 10 輪適合排查用例間相互依賴的問題 ./build/unit_tests --gtest_shuffle --gtest_repeat10 # 輸出 XML 報告 ./build/unit_tests --gtest_outputxml:test_results.xml # 輸出 JSON 報告 ./build/unit_tests --gtest_outputjson:test_results.json--gtest_filter支持通配符和排除規(guī)則格式是正匹配:負匹配。本地調(diào)試時可以先用--gtest_list_tests確認用例全名再復制到--gtest_filter里精準執(zhí)行。6.2 CTest 批量執(zhí)行與并行上一節(jié) CMake 配置里的enable_testing()和gtest_discover_tests()已經(jīng)把測試注冊進了 CTest。批量執(zhí)行統(tǒng)一走ctest --test-dir build --output-on-failure --parallel 4--parallel 4表示同時跑 4 個測試任務適合用例多且彼此獨立的場景。--output-on-failure表示只在失敗時輸出詳細日志CI 里看到的是干凈的白底綠字失敗時立刻定位到具體斷言。如果你有多個測試可執(zhí)行文件ctest會統(tǒng)一調(diào)度如果只有一個二進制但用例特別多可以拆成多個測試程序分別注冊再用-j并行。6.3 分片執(zhí)行用例數(shù)量大到單臺機器跑不完時可以用分片參數(shù)把測試拆到多個節(jié)點上。# 節(jié)點 1 ./build/unit_tests --gtest_total_shards4 --gtest_shard_index0 # 節(jié)點 2 ./build/unit_tests --gtest_total_shards4 --gtest_shard_index1CI 平臺比如 GitHub Actions 的 matrix可以動態(tài)生成這 4 組命令。分片后每個節(jié)點只跑四分之一的用例總體執(zhí)行時間能壓到原來的四分之一左右。6.4 GitHub Actions 示例一個最小的 C 項目 CI 配置可以這樣寫name: unit-tests on: [push, pull_request] jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Configure run: cmake -S . -B build -DCMAKE_BUILD_TYPERelease - name: Build run: cmake --build build -j2 - name: Test run: ctest --test-dir build --output-on-failure這套配置的核心是三條命令配置、編譯、運行測試。編譯放在測試之前失敗時 CI 直接標紅測試階段輸出--output-on-failure配合 GitHub Actions 的日志折疊定位失敗用例非???。7. 資源占用與性能觀察GoogleTest 本身對資源沒有特殊要求但大規(guī)模測試工程在編譯和運行階段會有一些值得觀察的點。編譯階段googletest 庫本身編譯一次之后就不會再變了真正影響增量編譯速度的是你的測試文件數(shù)量。每個測試文件都包含gtest/gtest.h這個頭文件比較重建議按模塊拆分測試文件而不是把幾千個TEST塞進一個巨型cpp。如果測試工程實在太大可以考慮 PCH預編譯頭或者 Unity Build把測試源碼合并編譯來減少重復解析頭文件的成本。運行階段默認情況下所有測試在同一個進程里串行執(zhí)行每個TEST結束后會清理夾具。資源占用主要看兩個指標內(nèi)存峰值和單用例耗時。這里可以用系統(tǒng)自帶的資源監(jiān)控工具觀察也可以直接看ctest輸出的耗時字段。死亡測試因為要創(chuàng)建子進程單用例開銷明顯高于普通用例數(shù)量控制在一個合理范圍比較穩(wěn)妥。如果測試涉及真實文件 IO、網(wǎng)絡請求或大型容器這類用例即使套了 GoogleTest 也快不了。優(yōu)先用 gMock 隔離外部依賴讓單測跑在純內(nèi)存環(huán)境里。確實無法消除耗時的重用例建議放到單獨的測試程序里用ctest --parallel單獨并行避免拖慢其他用例。內(nèi)存和端口沖突也要留意。GoogleTest 不會自動釋放你自己在SetUp里申請的外部資源如果TearDown寫得不對長時間跑全量測試可能積累資源泄漏。用一個簡單的觀察方法重復執(zhí)行同一組測試兩次如果第二次明顯變慢或者持續(xù)增長內(nèi)存大概率是清理邏輯有問題。8. 常見問題與排查方法下面是接入 GoogleTest 時最容易遇到的幾類問題整理成排查表問題現(xiàn)象可能原因排查方式解決方案編譯報錯gtest/gtest.h: No such file or directory依賴未拉取或 include 路徑缺失檢查 build 目錄中 googletest 相關源碼目錄是否存在重新執(zhí)行FetchContent_MakeAvailable接入路徑用 CMake Target 而不是手動 include鏈接報undefined reference to testing::Test::Test()測試源碼沒有鏈接 gtest 庫檢查target_link_libraries添加GTest::gtest鏈接鏈接報undefined reference to main沒鏈接gtest_main也沒寫自己的 main查看可執(zhí)行文件入口符號鏈接GTest::gtest_main或自己寫 main 調(diào)用RUN_ALL_TESTS()CTest 列表為空但測試能編譯CMake 未啟用測試發(fā)現(xiàn)檢查enable_testing/include(GoogleTest)添加enable_testing()和gtest_discover_tests()死亡測試不按預期觸發(fā)崩潰行為與正則不匹配單獨執(zhí)行該用例觀察子進程 stderr調(diào)整第二個參數(shù)正則確認錯誤信息關鍵字EXPECT_EQ比較字符串一直失敗比較的是char*指針地址打印兩個值確認改用EXPECT_STREQ多個用例互相影響用例間共享全局狀態(tài)或靜態(tài)變量用--gtest_shuffle --gtest_repeat復現(xiàn)在SetUp/TearDown中重置狀態(tài)消除執(zhí)行順序依賴FetchContent 拉取 googletest 超時網(wǎng)絡到 GitHub 不穩(wěn)定查看 CMake 日志中的下載地址手動 clone 到本地用SOURCE_DIR指定目錄測試通過但進程退出碼非零有泄漏檢查工具或自定義 main 邏輯查看退出碼和 stderr檢查main返回語句確認調(diào)用了RUN_ALL_TESTS()其中“用例互相影響”是比較隱蔽的一類問題。建議新工程從一開始就遵守兩條紀律測試不依賴執(zhí)行順序測試不依賴全局狀態(tài)。否則一旦用例數(shù)量上千排查成本會急劇上升。9. 最佳實踐與使用建議第一批測試不要貪多。先挑一個邊界清晰、輸入輸出簡單的模塊寫好 5 到 10 個用例把整套 CMake、CTest、CI 流程跑通再逐步擴大覆蓋面。這樣出現(xiàn)問題時能快速判斷是框架接入問題還是業(yè)務邏輯問題。測試命名要能表達業(yè)務語義。TEST(StringUtilTest, TrimRemovesLeadingAndTrailingSpaces)比TEST(StringUtilTest, Test1)可讀性強得多。失敗報告里直接就是完整語義不用再對照需求文檔猜“這個用例想驗證什么”。斷言的選用要有原則。一個用例里前置條件用ASSERT_后面所有步驟都依賴這個條件時失敗了就該立刻停具體結果校驗用EXPECT_這樣一次運行能收集到盡可能多的失敗信息減少重復排錯的次數(shù)。把測試用例當作“行為契約”來維護。每次修復 bug先寫一個能復現(xiàn)該 bug 的失敗用例再修代碼讓它變綠。這樣每個用例對應一條真實的回歸場景以后重構時這些用例就是你的安全網(wǎng)。批量任務和接口方面如果你的項目已經(jīng)有 CI建議把測試分成至少兩層一層是純單測不依賴網(wǎng)絡、不依賴數(shù)據(jù)庫、不依賴外部進程跑得快另一層是集成測試可以連接測試環(huán)境服務單獨控制觸發(fā)條件。GoogleTest 負責第一層第二層可以繼續(xù)用這套框架寫但在 CMake 里拆成不同 target避免所有環(huán)境變量、配置文件都堆在一個可執(zhí)行文件里。外部依賴一律用 gMock 模擬。真實網(wǎng)絡請求、真實文件寫入、真實數(shù)據(jù)庫連接都不適合出現(xiàn)在單元測試里。測試環(huán)境不穩(wěn)定會導致用例隨機失敗CI 的可信度自然就沒了。接口邊界上只 Mock 被測代碼直接依賴的那一層不要連自己也 Mock 了。最后商業(yè)項目里接入開源測試框架要檢查一遍許可證。GoogleTest 的 BSD 3-Clause 對商用比較友好但如果你在測試代碼里引用了其他組件每個組件的許可證都要單獨確認。測試代碼里不要混入未脫敏的用戶數(shù)據(jù)、密鑰、內(nèi)部地址這類信息一旦進入版本庫即使只是測試數(shù)據(jù)也可能成為安全隱患。10. 總結與下一步如果現(xiàn)在你手里的 C 項目還沒有任何測試最值得做的事就是用FetchContent把 GoogleTest 接進來給最核心的工具函數(shù)補上第一批TEST然后用ctest跑通一次。整個過程半小時內(nèi)能完成收益從第一次重構開始就能體現(xiàn)出來。最容易踩的坑集中在三類鏈接漏了GTest::gtest_main導致沒有入口、頭文件路徑依賴了全局 include 而不是 CMake Target、用例之間共享狀態(tài)導致順序依賴。這三類問題在本文第 8 節(jié)都有對應排查方式遇到時可以先翻表。接下來可以按這個順序擴展先把斷言和TEST_F用熟再補參數(shù)化測試覆蓋邊界值然后給外部依賴引入 gMock最后把 XML 報告接入 CI配合--gtest_shard做并行分片。等測試規(guī)模到幾百個用例時你大概率會需要覆蓋率工具配合觀察這時候再考慮 gcov、lcov 等方案GoogleTest 不會在這條路上成為瓶頸。GoogleTest 最大的價值不是“用了 C 就必須配一個測試框架”這種形式主義而是它讓回歸測試的成本降到足夠低低到你有動力在每次提交前都跑一遍而不是把測試文件堆在那里當擺設。先從一個文件、幾個用例開始跑通了后面的事就順了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
青青草视频免费观看| 99热| 婷婷成人AV| 亚洲综合网 665566| 久热这里只精品| 天天草女人| 9|无码久久久久久| 九九热精品视频| 六月丁香婷| 九月婷婷在线视频| 国产AV一区二区三区最新精品| 五月丁香在线综合| 五月情婷婷| 婷婷激情五月天激情在线| 狠狠香婷婷五月| 久久婷婷五月综合色和| 婷婷伊人久久无码色五月| www.五月天| 99re久热只有精品6在线直播| 九九中文字幕九| 五月婷婷六月天| 婷婷激情图片| 五月丁香综合激情| 色婷婷激情| 天天狠狠色综合| 五月婷俺去也| 久思思热视频在线观看| 五月丁香激情综合网| 香蕉99网| 综合久久8| 2018国产大陆天天弄| 丁香婷婷五月天激情四射| 丁香五月另类小说| 夜夜爽天天爽| 久久婷婷五月天蜜桃| 91精选国| 欧美婷婷综合网| 99色爱| 丁香五月电影| 俺去也综合| 久色激情| 人妻av在线| 99热这里是精品| 深爱激情av| av婷婷丁香 六月| 激情99| 色色婷婷丁香五月天| 五月停性愛| 久久er九九| 4399在线观看免费高清黄色视频| 日本色天堂| 99热在线观看99| 亚洲9久久精品| 国产精女同一区二区三区久 | 97干在线播放| 久久婷婷影院| 超碰在线91| 国产成人综合网| 五月婷婷婷婷| 亚洲亚洲人成综合网络| 丁香五月停停av| 91大屁股在线| 午夜丁香 婷婷| 涩五月丝袜婷婷| 99久久五月婷婷| 天天操天天插天天射| 亚洲色99综合天堂| 亚洲av综合网| 日韩综合大黄| 97精品在线| 五月天婷婷免费| 超碰在线99| 大香网伊人久久综合| 五月激情啪啪啪| 开心激情综合| 五月婷久久综合| 国产性爱大片久久| 色综合丁香| 六月激情婷婷色| 欧美99热| 综合99在线| 色久影院| 激情五月亚洲| www.夜夜操.com| 熟女人妻一区二区三区免费看| 99久久欧美| 久艹伊| 九九色欲网| 99在线观看视频免费| 思思久久思思| 久久婷婷五月天| AA片在线观看视频在线播放| 婷婷五月天综合网| 激情丁香六月| 中文字幕无码人妻少妇免费视频| 九九青草热| 在线观看熟女少妇| 丁香 久久| 久操大香蕉| 婷婷色色色| 91操片| 激情五月天开心网丁香无码| 婷婷四色五月| 五月丁香久久色| 狠狠操天天操| 欧美日韩91| 亚洲V国产V欧美V久久久久久| 玖玖综合玖玖| 婷婷综合五月天亚洲综合| 婷婷久久五月丁香| 高清国产AV| 婷婷激情综合无月| 97香蕉人人在线观看| 五月丁香| 久久九九爽| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV| 色综合色色| 五月情婷婷| 激情五月婷婷| 亚洲五月天综合色| 天天爱天天爽| 五月亭亭六月色| 日本婷色| 色情婷婷。| 婷婷深爱五月丁香网| 九九这里都是精品| 激情欧美婷婷| 综合色色网| 丁香五月最新地址| 五月婷婷狠狠干| 操操综合网婷婷| 99色婷婷视频| AV性爱网| www.夜夜操.con| 99日本黄站| 欧美三级视频| 26uuu最新地址| 疯狂做受XXXX高潮A片动画| 色综合天堂| 丁香六月婷婷综合啪啪| 婷婷九月丁香中文| 五月丁香六月激情欧美综合| 天啪色| 五月丁香激情综合六月涩涩爱| 五月天色图| 少妇人妻综合色6699| 九九热在线视频观看| 久久婷婷激情久久| 99热99极品观看| 色噜噜五月丁香婷婷| 激情网开心网| 久热99久热| 日日撸日日操| www.99精品视频| 九九热最新视频| 七七色综合| 人妻操操色| 丁香五月狠狠在线观看| 综合色播| 熟女色专区| www.婷婷五月| 婷婷五月免费观看| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 天天操天天爱天天日| 天天色播| 五月丁香直播| 岛国午夜视频| 国产 码在线成人网站| 久久性操| 成人国产欧美大片一区| 丁香五月天激情视频| 黄色成人AV在线| 丁香五月六月综合欧美| 一区二区三区视频| 激情综合五月丁香六月婷婷| 女人被男人吃奶到高潮| 色五月成人婷婷| 成人国产欧美大片一区| 开心激情综合| 日本的α片xxxwww| 91丨九色熟女丨首页| 亚洲人人操| yellow视频在线观看91| 色婷婷成人做爰A片免费看网站| 日韩AAA| 亚洲精品另类| 久久久久久久人妻| 色色色99| 狠狠色噜噜狠狠狠888了| bukadeavzaixian| 天天天在线观看| 天天操天天爱天天日| AA片在线观看视频在线播放| 开心五月婷婷| 国产精品色一哟哟| 亚洲综人色综网| 99人妻碰碰久久久禁片| 日本在线视频www色| 无码毛片992367| 思思热99er| 欧美人人操| 天天综合插插| 超碰av在线| 9久热精品在线视频| 五月婷亚洲精品| 九色视频91疯狂| 精品香蕉99久久久久网站| 思思热在线播放| 《诡秘之主》在线观看 | 99久久er| 狠狠色五月激情| 无码一级片| 人人爱操| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 婷婷色在线视频| 激情五月婷婷五月| 婷婷99狠狠躁天天躁中| 无码区婷婷五月花开| a色色色色色| 五月婷婷之综合激情在线| 国产午夜一区二区三区| 99国产精品久久久久久久久久久 | 九九精品热播| 青青草大香| 99自拍视频在线| 丁香五月23111| 99热爱爱干干日| 五月综合激情久久| 99精品偷自拍| 中文幕无线码中文字蜜桃| 九九热精品视频在线观看| 精品99爱免费视频在线观看| 亚洲婷婷开心五月| 久久久久久草黄色片AV在线观看 | 亚洲成人一区| xx久久| 色婷婷四虎| 欧美日韩91| www.婷婷,com| AVDV久久| 一级二级色大片| 久久A V无码视频| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 中国AV性爱观看| 秋霞性爱AV| 成人资源在线| 免费播放片大片| 在线不卡的视频| 涩婷婷五月天在线精品视频| 日本强伦片中文字幕免费看| 久久无码成人| 人人色人人弄人人操| 五月婷婷综合激情| 超碰99在线观看| 五月丁香啪啪激情| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 精品一二三区久久AAA片| 涩五月婷婷| 婷婷色操| 免费观看的av| 熟女人妻视频| 日操夜操天天操不卡| 色五月激情五月| 日产精品一线二线三线芒果| 婷婷5月久久综合网站| 欧美S码亚洲码精品M码| 超碰五月婷婷五月天| 五月婷婷 激情按摩| 99精品视频在线观看| 日日干夜夜干| 五月深情久久| 亚洲av网站| 日本久久99| 日日干五月天婷婷| 久久五月婷婷开心网| 五月人妻婷婷| 婷婷五月色情天| 天天做天天爱天天爽综合网| 亚洲欧美婷婷五月色综合| 直接看的AV| 99综合网| 99热在线爱| 五月天停停日日| 色色激情网| 丁香五月婷婷六月婷婷| 五月婷婷开心亚州在线| 在线成人视频免费| 五月婷婷六月色| 碰97 久| 色情网综合| 婷婷九月在线| 天天摸天天舔天天爽| 天天摸日日舔狠狠添婷婷婷 | 深爱五月婷婷| 91激情五月开心| 五月综合久久| 色色综合热| 人人操AV| 99er热精品视频| 久久视频婷婷| 三十熟女| 色色丁香婷婷| 久久丁香五月婷| 激情综合无码| av在线不卡播放| Av九九| 狠狠操天天操综合| 九九综合色综合| 大香蕉综合| 99久久久精品| 五月天综合区| 五月婷婷色五月| 色婷婷伊人激情在线观看| 操逼综合网| 97色色色色色色色| 国产精品国产| 最新日韩AV中文字幕| 91热在线| 99精品综合| 久久婷婷影院| 激情综合区| 婷婷色成人| 91精品久久久久久综合五月天| 中国女人做爰A片| 97丁香婷婷| 五月天婷婷伊人| 伊人激情综合网| 国产精品成人网址| 色五月五月丁香| 91九色视频| 精品国产a| 天天摸天天舔在线视频| 婷婷亚洲综合| 国产精品色婷婷久久久精品| 五月天婷婷视频30| 国产毛多水多女人A片| 99男人天堂| 这里只有精品视频在线看| 成人日韩欧美| 色五月婷婷av| 久久伊人婷婷| aa久久| 九九热最新地址| 九九九激情综合| 婷婷五月激情的图片| h在线看免费版在线看| 99A片| 青青草视频福利| 激情五月久久| 伊人五月婷婷| 国产偷人爽久久久久久老妇APP| 五月天堂婷婷| 天天色播| 天天看片日日夜夜| 国产在线aaa片一区二区99| 久操热| 九九这里是免费的视频5| www.色色com| av性爱在线| 1024国产在线| 久久婷婷六月综合| Www99热| 久色激情| 婷婷丁香射射| 欧洲MV日韩MV国产| 丁香五月婷中字幕| 4399高清无码视频| 99热九九热| 大香蕉久久伊人婷婷五月丁香| 超碰在线看| 国产精品大香蕉| 久草热在线视频| 久热只有这里有精品| 开心激情站| 亚洲中文无码成人| 婷婷在线日韩综合| 婷婷五月色惰| 九九99久久| 国产成人网址| 久久久久人妻精选| 久久精品91视频| 五月色色网| 婷婷丁香在线| 狠狠色丁香乆乆| 天天爱夜夜爽| 粉嫩av蜜桃av蜜臀av| 久久综合五月| 99热中国| PORNY九色9l自拍视频成人| 激情开心五月天| 五月婷婷,六月激情| 国产婷婷婷| 五月天婷婷视频| 久草a片| 日日骑夜夜撸| 六月丁香开心婷婷欧美| 九九青青草成人| www.夜夜操.con| 婷婷五月丁香性爱| 亚洲第一第二网站| 免费观看欧美成人AA片爱我多深| 婷婷五月天综合网| 操逼视频网址| 久久久97| 天天综合久久| 色五月激情基地| 色婷婷影| 日日噜噜夜夜狠狠久久丁香五月| 99在线观看视频| 森林影视大全,最好看的2019年视频 | 天天爽综合| 婷婷娌伦网| 欧美成人精品A片免费一区99| 五月天精品综合在线| 五月丁香六月婷婷久久肏| 五月丁香综合| 色五月婷婷久久| 五月婷婷色情| 丁香五月天激情婷婷丁香六月| 九色99视频| 另类专区在线观看| 五月在线| 天天爽夜夜爽天天爽夜夜爽| 婷婷基地成人五月天| 美女伊人久久| www.wuyuetian啪啪| 久热9| 天天天综合网| 婷婷五月天色综合| ...婷婷国产成人亚洲日韩| 色爱99| 五月天激情美女久久| av九九| 噜噜狠狠色综无码久久合欧美| 五月天亚洲最大成人| www.91.com黄| 婷婷情色五月天| 97涩婷婷| 91在线视频观看午夜福利| 大香蕉综合| 香蕉婷婷色五月| 亚洲天堂aaa| 丁香五月AV综合激情| 一区二区成人电影| 色v综合网| 久久99jiu9| 久久综合五月天激情小说网站| 婷婷伊人网| 91综合在线观看| 免费无码毛片一区二区A片| 激情五月综合网| 97影院一级片| 婷婷五月丁香综合| 亚洲高清在线| 欧洲亚洲精品| 婷婷五月天AV| 无码免费人妻A片AAA毛片西瓜 | av在线超清中文| 97久久人人| 日本系列_4页_777FP| 色天堂操| 日韩av在线电影| 97色色综合| 婷婷伊人75| 伊人9在线| 久久综合色五月| 99内射视频| 波多野结衣AV无码Porn| 无码人妻激情| 色婷婷久久综合久色| 深爱五月激情网| 另类色网| 色爱终和网| 青草少妇激情| 4399亚洲视频| 99在线观看| 国产全是老熟女太爽了| 真实的国产乱XXXX在线91| 九九成人电影婷婷| 91日韩美女被插视频| 婷婷综合在线播放| 久er免费视频| 激情宗合网激情五月天| 香蕉人在线香蕉人在线 | 综合啪啪| 天天日夜夜爽| AⅤ在线播放网| 91色在线 | 日韩| 激情九月综合| 人妻肉射免费观看| 这里有精品| 思思久久精品| 99精品综合在线| 在线成人视频免费| 精品一区二区三区四区五区六区介绍| 操你av| 亚洲欧洲午夜成人精品av| 婷婷五月花| 中文字幕人成乱码在线观看| 婷婷五月激情综合啪啪| 婷婷激情五月吧| 婷婷五月天激情小说网站| 午夜五月天| 久操热线| 日韩av高清| 亚洲综合九九| 亚洲精品无码99热| 婷婷六月综合基地| 日本在线免费中文com.| 能看的av| 亚洲综合色婷| 色婷婷色99国产综合精品| 婷婷综合五月激情| 98色花堂98t.R| 超碰在线99| 丁香六月天婷婷| 久久99久久99精品免视看婷婷| 亚洲欧洲自拍图片专区五月天| 日本色婷婷| 国产精品久久久久久久久久免费 | 日韩成人AV在线播放| 99高级会所久久| 中文AV网站| 99热这里只有精品8| 香蕉中文在线| 国产热精品| 大香蕉久| 人人叉久| 天天夜夜六月丁香五月婷婷老师| 婷婷成人五月天成人文学| 九九精品re免费视频| 亚洲视频色色| 99色视频在线| 99操久久| 综合色影院| 性爱111111| 国内裸舞二区| 五月在线| 综合色播| 久久停停超碰| 26UUU欧美激情一区二区| 激情婷婷综合五月少妇| 久久黄色片| 久久婷婷五月国产色综合激情| 综合久久99| 两性婷婷丁香五月| 五月丁香在线婷婷蜜桃| 99热成人| 日韩五月婷婷| 久久曰曰| 夜夜躁狠狠| 五月天婷婷色| 91碰视频| 色狠狠色综合久久久绯色AⅤ影视| 婷婷五月天男人影院色色网| 在线看片h站| 美女婷婷六月色| 五月天综合久久| 任你日视频| 另类激情综合| 九月婷婷色色| 亚洲av网站| 久9免费视频| 五月婷婷五月天| 91日精品| 久久总和99| 99亚洲视频| 黄网免费观看| 五月婷丁香花| 国产毛片精品一区二区色欲黄A片| www.xtbsty.cn.com蜜乳AV| 国产激情综合五月久久| 99热永久在线观看| 成 人片 黄 色 大 片| 中文字幕丰满乱孑伦无码专区| 五月天伊人网| 五月婷婷色男女| 日本不卡一区二区三区| 99青青草| 九九热精品99| 色色亚洲视频| 欧洲激情五月天| 丁香六月成人| 少妇性按摩无码中文A片| 五月婷婷偷拍| 色色色网站| 99热精品9| 婷婷五月丁香激情图片 | 九色综合网| 思思精品热在线| 丁香五月婷婷天堂大香蕉| www.日韩国产| 婷婷丁香色五月天久久88| 丰满少妇猛烈A片免费看观看| 五月婷婷色情| 操逼视频一区| 午夜精品人妻无码一区二区三区| 五月婷婷自拍| 五月丁香六月婷综合成人综合 | 丁香五月天网友自拍啪啪啪视频| 97日本在线| 天天天干夜夜夜操| 婷婷色5月激情网| 久久久久亚洲AV无码网影音先锋| 色五月婷婷色| 亚洲综合视频八| 人人摸人人搞| 五月天激情播播网| 夜色.cnm| 五月丁香六月激情欧美综合| 狠狠狠狠狠草| 91黄址| 国产AV一区二区三区最新精品| 五月丁香亚洲婷婷| 99热这里只有精品26| 狠狠干.com| 色丁香婷婷| 99re这里有精品手机在线| 九九热婷婷| 狠狠精品干练久久久无码中文字幕| 五月婷婷激情综合视频| 色情婷婷| 性爱七区| 国产精品天天狠天天看| 久久九九爽| 3www激情| 婷婷五月天Av| 婷婷丁香六月| 日韩视频女神99| 99ER热精品视频| 婷婷五月激情欧美| 婷婷丁香五月亚洲| 激情婷婷丁香色五月综合| 香蕉婷婷色五月| 91色综合网站在线| 丁香六月天| 久久久.COM| 丁香婷婷十月| 色五月丁香婷婷综合| 51成人| 成人在线免费网址| 狠狠久久婷五月综合色| 99这里只有精品| 欧美久久婷婷| 国产精品国产| 直接看的av| 婷婷五月天在婷| 一本久久亚洲五月婷婷 | 疯狂做受XXXX高潮A片动画| 五月丁香性爱| 久热黄色| www99在线观看视频| 丁香六月婷婷姐网| 这里只有精彩亚洲视频推荐| 婷婷丁香五月天色区| 99这里只有精品视频免费| 99九九综合久久九九| 久九九热| 欧美天天搞| 91AV视频| 伊人久久中文网| 丁香五月天激情网| 天天草天天日| 久热中文字幕在线线观看| 五月综合婷婷网| 日韩成人五月天| 五月婷婷色播视频| 五月激情六月| 亚洲色婷婷99一9|| 五月婷婷之六月丁香| 日韩六十路91性交电影| 亚洲婷婷婷| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 五月丁香综合激情网| 激情开心五月天| 丁香六月婷婷综合缴| 五月婷婷天天| 男人的天堂五月丁香| 99操免费视频| 激情五月婷婷| 免费精品99| 97婷婷丁香五月天激情图片| 天天插天天爽| 色五月大| 五月天激情四射| 日本色五月| 99九九视频| 丁香婷婷久久老熟女综合网| 婷婷五月天美女视频| 久久只有18视频| 婷婷丁香18| 97人人操人人| 六月丁香网| 色五月丁香A欧美com | 色五月激情问网站| 69久久99精品久久久久婷婷| 色五月网址| 亚洲激情五月婷婷日日| 五月婷综合网| 操逼巨乳91| 五月丁香| 久99久视频精品| 91久久久久久久久久| 国产精品久久久久久白浆色欲| 操操操www.com| 色五月婷婷婷婷| 噜一噜在线| 色久综合| 丁香六月天婷婷| 九色婷婷| 狠狠操在线视频| 丁香五月婷婷六月丁香| 99热国产免费| 丁香五月天日韩无码| 日韩久热| 99热色在线精品| 国产成人AV在线| 性av| 碰97久久| 五月天激情子轮| 日本啪啪天堂| 99A片| 亚洲精品成人| 久久人妻视步| 婷婷五月天成人网| 2013AV天堂| 日本丁香五月婷婷| 五月天激情啪啪| 国产精品久久久久久久久久| 亚洲天堂啪啪| 2025天天操| 97婷婷色| 大香蕉五月天婷婷丁香91| 婷婷五月免费在线| 日本三级中国三级99人妇网站| 丁香婷婷欧美综合| 99精品视频免费在线播放| 日日天天干| 丰满少妇猛烈A片免费看观看| 久久总和99| 久久少妇视频| 日韩AV免费电影在线播放| 二色av| 精品色色| 热996精品在线观看| 天天色,天天操,天天射| 久久99精品久久只有精品| 日韩色色一区| 色情综合网| 国外亚洲成AV人片在线观看| 97人人干| 九九黄色网| 亚洲 视频 导航 一区| 狠狠草狠狠草| 久久ri精品视频| www国产亚洲色婷婷com| 人妻丰满精品一区二区A片| 91碰碰碰| 婷婷丁香五月亚洲| 色婷操逼| 久久五月视频| 久九色| 婷婷六月啪啪| 国産精品| 国产操碰| 婷婷久久五月| 五月丁香色色网| 色婷婷在线播放| 亚洲综合视频在线| 激情另类综合| 亚洲日日操| 九九精品在线视频观看| 久久婷婷五月综合| www.天天色综合| 饮料下药迷倒漂亮女同事强干| 91欧美日韩综合| 久久xxxx| 视频综合网| 久久ww| 五月丁香六月婷婷不卡免费无码| 国产欧美熟妇另类久久久| 欧美天天综合网站上去吧| 婷婷五月天小说| 色综合爱综合| 久久R激情| 啪到高潮激情丁香五月| 青青草五月天| 色婷婷五月在线| 黄色AV日韩| 99热色精品| 婷婷色系婷色| 拍色综合| 五月丁香自拍| 色久婷婷五月| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 影音先锋一区| 狠狠色成人影片| 五月婷婷 六月丁香| 激婷网| 一本久道综合色婷婷五月| 亚洲激情| 极品另类| 另类色视频| 97日韩无套内| 99视频在线精品免费观看2| 色综合狠狠色| 五月婷婷综合激情网| 777久久综合视频 | 色色五月天com| 激情五月综合色婷婷| 五月天色软件| 91丨九色丨白浆秘| 噜噜噜噜婷婷五月天| 成人片黄网站色大片免费毛片| 色性日本| 大香蕉伊人99| 日韩成人电影AV| 欧美狠狠地| 91热手机在线| 人人爽天天爽| 午夜丁香六月婷| 丁香五月天堂亚洲社区| www.久久综合| 色色丁香五月婷婷| 色碰97| 99在线精品视频在线观看| 天天日狠狠| 激情婷婷网| 大香蕉久久婷婷精品综合| Se.婷婷五月天| 91xxxx九色| 综合激情婷婷| 五月婷婷激情久久| 99色婷婷| 9 1 A v久久久| 欧美色婷婷| 丁香五月乱中文字幕| 婷婷97碰碰| 黄色片avv| 色欲色香综合网| www狠狠| www.日本久久videos| 99热国产在线| 久久曰曰| 久久五月丁香| 亚洲精品性色| 超碰免费人妻| 婷婷激情五月天小说| 性按摩玩人妻HD中文字幕| 久久美女五月天| 久久午夜理论| 91操片| 国产精品岛国片在线观看免费| 狠狠操狠狠操AV| 99亚洲精品| 玖操97| 综合丁香婷婷五月天| 欧美性猛交99久久久99| www久久久久久久久久久| 色欲一区二区三区精品A片| 中文字幕色色| 99综合99| 五月婷婷无码| 五月丁香六月婷| 热99.com婷婷| 蜜桃成语时李时珍 免费| AV大香蕉| 婷婷五月天国产在线播放| WWW.夜夜| 婷婷AV丁香| 丁香九月综合| 天天肏高清在线| 九九热99精品| 香蕉色色网| 狠狠狠狠狠| 丁香五月影院| 亚洲中文av| 九九99九九99偷拍视频免费看| 999热成人在线综合网| 色视五月天婷婷| 午夜丁香六月婷| 亚洲sesesese| 性爱动图国产麻豆一区二区三区| 九色无码| 熟女网站久久| 亚洲视频在线观看| 成熟妇人A片免费看网站| 亚洲精品久久久久久久久久吃药 | 97操碰| 天天干天天干天天干| 亚洲精品激情| 天天插天天射| 丁香六月激情国产| 五月激情婷婷国产精品久久久久久| 玖玖精品视频99| 国产26uuu视频| 99精品久久久久久久婷婷久久| 狠狠干天天内射| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 国产激情综合五月久久| 大香蕉啪啪| 色色亚洲五月天| 97色婷婷成人综合在线观看| 超碰chaompinm| 狠狠色综合精品视频在线| 亚洲成人五月天| 超级碰碰91| 日韩在线观看亚洲| 亚洲激情四射| 激情五月婷婷视频一区二区三区| 99精品热| 色婷婷久久| 久久精彩视频| 99五丁香月| 91啦丨九色丨刺激中文| 欧美性久| 色综合中文| 琪琪理论片| 夜夜操天天爽| 久久只有18视频| 色玖玖爱| 性色五月天| 欧美婷婷丁香社区在线播放| 五月丁香六月婷婷激情四射| ady狠狠入| 久久婷婷影院| 久久这有这里精品| xxx.色婷婷| 99热只有这里才是精品| 天天日 天天草| 99热亚洲精品| 亚洲综合五月天婷婷丁香| 五月色亭丁香| 中文字幕,综合,91| 久久在这里有精品| 五月婷婷之综合激情| www五月| av九九| 热99视频精品在线| 99精品视频偷拍| 激情综合网,婷婷五月天| 五月丁花色综合网| 久久婷婷五月天激情四射| av九九| 天天肏天天舔AV| 激情五月综合| 99色1| 亚洲旡码| XX色综合| 99热在线精品观看| 久色国产| 性爱网五月天| 影音先锋男士资源网一区| 日本精品干| 亚洲AAAA网| 激情综合区| 亚洲精品又粗又大又爽A片 | 色婷婷五月在线| 五月青青草综合| 色色五月天丁香婷婷| 苗黎美女四级成人版一级二级毛片| 九97免费视频| yazhou seshipin| 五月丁香六月婷婷综合网缴情| 999激情视频| yirenjiqingshiping| 狠狠色丁香婷婷| 五月丁香激情片| 久久99热在线观看| 五月婷婷激情| 综合AV在线| 丁香五月婷婷亚洲另类| 激情图片婷婷| 亚洲天天| 婷婷丁香综合| 五月激情婷婷开心| AA片在线观看视频在线播放 | 丁香六月婷婷综合啪啪| 婷婷久久久| 日本女人久久| 婷婷五月天小说网| 激情五月天婷婷| av九九| 丁香六月婷婷色XXXXX| 色婷婷电影网| 秋霞免费三级片| 国产精品VA在线| 噢美99| 激情5月婷婷狠狠干| 五月综合激情| 性爱人人网| 久久精品小视频| AA片在线观看视频在线播放| 天天色综合天天| 色五月涩涩婷婷| 色99www.| 夜夜爱网站| 国产成人AV不卡| Va另类视频| 手机旧版看人妻1025| 婷婷五月色惰| 五月天偷拍| 久久44| 五月婷婷福利| 丁香五月天堂亚洲社区| 丁香五月婷婷亚洲综合精品在线| 婷婷激情五月| 丁香月五月天婷婷久久| 99热网站| 开心婷婷五月天综合| 久久草中文日韩欧美| 九九狠狠干| 丁香婷婷久久 | 激情九月婷婷| 超碰人人在线| 亚洲天天操| 都市激情蜜桃婷婷五月天 | 777久久综合视频 | 北京熟妇搡BBBB搡BBBB| 就爱操www com| 91操碰| 五月婷婷开心激情六月蜜桃| 中文字幕日产A片在线看| 久久永久网址| 疯狂做受XXXX高潮A片动画| 天天肏天天插| 91色呦哟| 色五月在线观看| 色婷婷AV在线| 97视频91| 丁香综合伊人| 日本久久婷| 涩综合在线 | 久热这里只有精品性色AV| 中字幕视频在线永久在线观看免费| 五月丁六月香av| 成人午夜天| 九九性视频| 亚洲国产另类av| 99精品自拍视频| 梁铮版《蜘蛛女侠》在线| 综合色久| 老司机伊人| 99自拍视频网站| 亚洲激情综合| 天天日天天摸天天| 玖玖玖婷婷婷| 人人色婷婷| 九九综合视频在线观看| 欧美情色一区| 性爱视频久久| 丁香激情五月综合网| WWW.HENHENL.| 强伦轩人妻一区二区电影| 99久久婷婷| 色五月丁香com| 婷婷婷婷婷开心无码播放| 婷婷五月天av| 婷婷操无码| 五月丁香成人小说| 26uuu四色| 5五月综合网亚洲| 99日本黄站| 亚洲久久婷婷| 激情五月天色色网| 全部老头和老太XXXXX| 婷婷五月天成人| 色婷婷操逼| 8090在线影视少妇| 五月丁香自拍| 九九精彩久久| 色婷婷六月| 色人久久| 另类综合激情| 成人av观看| 九九爱激情| 婷婷成人视频| 777色婷婷爱五月| 視频福利乱色| 色碰碰视频| 色人妻五月| 凹凸7777操操操| www91色网站| 五月色综合| 激情综合色图| 欧洲激情五月天| 超碰av在线| 操操精品| 日本九九九九| 激情五月天影院| 六月色色婷婷| 九九视频网| 天堂久久大香蕉| 99噜噜噜在线播放| 国产成人网| 亚洲美女网Va| 五月天停停成人网| 综合激情五月综合激情五月激情1| 亚洲啪啪精品| 69凹凸成人综合网| 26uuu欧美| 丁香婷婷情色五月天| 激情综合五月色丁香婷婷| 激情丁香淫荡婷婷| 五月婷婷深深爱| 91久久九色| 9色小视频在线观看| 激情六月婷婷| 激情五月天婷婷五月天| 97碰| 日韩aaa| 99re视频精品| 婷婷亚洲色| 欧洲综合色| 久久最新色色色| 五月天婷婷色色| 色五月婷婷在线| 色爱综合五月| 综合精品啪啪| 狠狠色噜噜色狠狠狠综合色 | 99色热视频| 婷色成人| 亚洲国产精品成人免费一区久久久在线观看AAAA| 日本99视频精品免费播放| 人妻中文av| 真实的国产乱XXXX在线91| 中文成人在线| 最近中文字幕大全免费版在线 | 996热| 色婷婷五月在线| 色色性爱视频| 亚洲不卡| 久草五月天| 91啪啪视频| 国产毛片精品一区二区色欲黄A片| 色婷五月天| 99爱视频在线观看这里只有精品| 久久久婷| 国产精品久久久久久白浆色欲| 久色网址| 天天爽夜夜操| 五月天婷婷激情在线色图| 思思久久99| 中文字幕日产A片在线看| 少妇人妻丰满做爰XXX| 欧美顶级少妇做爰HD| 嫩草极品| 日韩成人电泉AV| 婷婷五月丁香色色| 婷婷九色| 婷婷激情四射| 婷婷久久网| WWW五月天| 五月天激情啪啪| 在线观看婷婷5月| 操逼六区| 婷婷五月天av| 五月丁香亭亭电影久久| 亚洲九九夜夜| 五月婷婷综合网| 九色在线五月婷婷网址| 91久草五月天婷婷| 婷婷五月丁香色综合| 久久色婷婷| 99这里只有免费的小视频在线观看| 亚洲精品色| 国产成人精品一区二三区熟女在线| 无码一区精品一区视频| 超碰色人妾| 成人网在线视频| 视频综合网| 国产精品香蕉| 97色在线观看视频| 99热91| 大香蕉在线观看9| 亚洲激情视频在线观看| 99婷婷五月天| 婷婷十月激情综合网| 婷婷亚洲色| www天堂99| 亚洲4区国产欧美| 亚洲乱码成人| 伊人久久丁香狠狠婷婷综合香蕉 | 在线99热| 夜夜爽天天日| 九九色婷婷| 9色在线| 婷婷激情五月天激情小说 | 激情五月综合网最新 | 人妻五月天激情开心网| 人妻精品久久久久久久| 九九色色网| 婷婷综合中文| A级毛片高清免费不卡播放谢谢谢谢| 精品久久二6| 日本狠狠网| 熟妇内谢69XXXXXA片| 五月婷久草| 久久狠色噜噜狠狠狠狠97| 玖玖午夜视频| 蜜桃婷婷丁香综合久久开心亚洲| 香蕉97碰碰碰超视精品| 丁香五月天在线直播观看| www..999热久| 日韩人妻AV在线| 久久伦乱| 婷婷瑟瑟五月天| 亚洲日韩一页精品发布| 人妻丰满精品一区二区A片| 91大神操美女| 丁香婷婷色五月| 国产成人一区二区三区在线观看| 99精品偷拍视频| 激情丁香淫荡婷婷| 色婷婷久久综合| Av在线不卡一区| 亚洲国产精品成人免费一区久久久在线观看AAAA | 成人性爱精品视频| 欧洲亚洲免费视频9| 7777久久亚洲中文字幕| 99久久a线观| 另类激情综合| 超碰成人公开| 日本99热| 婷婷五月天电影网| 五月丁香婷婷欧美色图视频五月丁香777电影| 色婷婷五月色| 涩婷婷五月天在线精品视频 | 国产精品丝| 婷婷伊人五月天| 国产成人综合网| 九九精品热播| 天天舔天天操| 日韩啪啪视品| 五月天伊人日日噜影片AV| 丁香六月婷婷开心| www久久艹| 99热这里是精品| 久久久久五月丁香| 天天激情夜夜干| 丁香五月色| 六月亚洲婷婷6月中文字幕| 丁香婷婷久久 | 91久热| 激情五月天色播| 婷婷综合日本| 久狠狠| 超碰99热精品| 婷婷丁香激情综合色情| 久久99草五月婷婷| 99热只有这里才是精品| 色色色色色色综合网| 99精品视频免费在线播放| 4399人妻无码久久久| www.色擼擼.com| 丁香五月激情综合久久| 99爽视频| 99ri精品视频在线观看| 婷婷丁香成人| 狠狠做婷婷| 婷婷香香五月| 超碰免费人人| 激情五月黄色小说| 天天日夜夜爽| 亚洲麻豆乱码国产2028| 国产精产国品一二三在观看|