# Apollo项目单元测试 ## 单元测试框架 Google C++ Testing Framework [简单用法举例](https://developer.ibm.com/technologies/systems/articles/au-googletestingframework/) ``` #include "gtest/gtest.h" double square‑root (double num) { if (num < 0.0) { std::cerr << "Error: Negative Input\n"; exit(‑1); } // Code for 0 and +ve numbers follow } TEST (SquareRootTest, ZeroAndNegativeNos) { ASSERT_EQ (0.0, square‑root (0.0)); ASSERT_EXIT (square‑root (‑22.0), ::testing::ExitedWithCode(‑1), "Error: Negative Input"); } int main(int argc, char ∗∗argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } ``` ## libprotobuf-mutator 一个针对protobuffer数据类型生成随机测试数据的库。 [用法参考](https://awesomeopensource.com/project/bruce30262/libprotobuf-mutator_fuzzing_learning?__cf_chl_captcha_tk__=29de0d820f8e165bb5c6953196e980d507a7fafe-1615275376-0-AYpi5G39V1CdmeCliLRh5iNZevzAePaFSkJl4z4C9VmoprWJe5zNNFoVG8_lc0PSdwK3F_LZHPOFlWRDz7UICuAWG08r5wOySQ3AlA81gpplAYm1_ewyUmzYnAUZU36GJpfFHDU5yOyZPmbO7nRpQhlVYNSeW1rA0BSzCqjyq7NY_XiS4TWxCKBCpi2Seh6lumtGixDQGZejwKhJEq431DUn-r8Pzg3z4b7sCgSXajVFLQr4DLvrKfsFxkwGA0n0dUw30BiN-20J6awkZyiJch5AdWodEEKxiNaVXVKlyveH42pZWoKvvfl1qmmfdbuwtEU_HKyZj6FKh2y8TA2JWsLxCc6qkg8sGElJOu098yvBJUkgIXq6oxviTyDwVY1__9L5tKdGAmIM3jA-myVGCIox36MBMYB7RhPb2FKYPFXezYRrXj8zzAJwBWf7Uux0IZTbJrUS0snuXYCiMQ8rPFwS3TRXcXpD-1lP2sflkxkBhvUzIHlC0oKEo254SruwZot1BquhgLCnnsoXdgdnw73idPP4-x47ftAv9n_cknn7X4I-KMh1R6jl_CwkZjfZp3FMEdyGQZFdZIiGZafuV7d644iA3VDxQsm-oSoQPQet4kduU-WumbTyed3Ri62-l4JSdmS8x83-AnAY0oNxo2b8I7MGjuoyNfNfJsxL7Fm_) ``` [简单使用](https://github.com/bruce30262/libprotobuf-mutator_fuzzing_learning/tree/master/1_simple_protobuf) Learning Simple protobuf example libprotobuf + libfuzzer libprotobuf + libfuzzer ( custom mutator ) How to combine libprotobuf-mutator and AFL++ Handling input samples from AFL++ in custom mutator ```