编译

VS 2022

  • 文件结构

image.png

  • cmake

    1. cmake .
    2. -- Building for: Visual Studio 17 2022
    3. -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19042.
    4. -- The C compiler identification is MSVC 19.30.30528.0
    5. -- The CXX compiler identification is MSVC 19.30.30528.0
    6. -- Detecting C compiler ABI info
    7. -- Detecting C compiler ABI info - done
    8. -- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.30.30528/bin/Hostx64/x64/cl.exe - skipped
    9. -- Detecting C compile features
    10. -- Detecting C compile features - done
    11. -- Detecting CXX compiler ABI info
    12. -- Detecting CXX compiler ABI info - done
    13. -- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.30.30528/bin/Hostx64/x64/cl.exe - skipped
    14. -- Detecting CXX compile features
    15. -- Detecting CXX compile features - done
    16. -- Found Python: C:/DevelopSoftware/Python/Python39/python.exe (found version "3.9.5") found components: Interpreter
    17. -- Looking for pthread.h
    18. -- Looking for pthread.h - not found
    19. -- Found Threads: TRUE
    20. -- Configuring done
    21. -- Generating done
    22. -- Build files have been written to: C:/DevelopProject/SourceCode/googletest/googletest-release-1.11.0

    image.png

  • Build

    1. Build started...
    2. 1>------ Build started: Project: ZERO_CHECK, Configuration: Debug x64 ------
    3. 1>Checking Build System
    4. 2>------ Build started: Project: gtest, Configuration: Debug x64 ------
    5. 3>------ Build started: Project: gmock_main, Configuration: Debug x64 ------
    6. 4>------ Build started: Project: gmock, Configuration: Debug x64 ------
    7. 2>Building Custom Rule C:/DevelopProject/SourceCode/googletest/googletest-release-1.11.0/googletest/CMakeLists.txt
    8. 2>gtest-all.cc
    9. 3>Building Custom Rule C:/DevelopProject/SourceCode/googletest/googletest-release-1.11.0/googlemock/CMakeLists.txt
    10. 4>Building Custom Rule C:/DevelopProject/SourceCode/googletest/googletest-release-1.11.0/googlemock/CMakeLists.txt
    11. 3>gtest-all.cc
    12. 4>gtest-all.cc
    13. 3>gmock-all.cc
    14. 4>gmock-all.cc
    15. 2>gtest.vcxproj -> C:\DevelopProject\SourceCode\googletest\googletest-release-1.11.0\lib\Debug\gtestd.lib
    16. 5>------ Build started: Project: gtest_main, Configuration: Debug x64 ------
    17. 5>Building Custom Rule C:/DevelopProject/SourceCode/googletest/googletest-release-1.11.0/googletest/CMakeLists.txt
    18. 5>gtest_main.cc
    19. 3>gmock_main.cc
    20. 4>Generating Code...
    21. 5>gtest_main.vcxproj -> C:\DevelopProject\SourceCode\googletest\googletest-release-1.11.0\lib\Debug\gtest_maind.lib
    22. 4>gmock.vcxproj -> C:\DevelopProject\SourceCode\googletest\googletest-release-1.11.0\lib\Debug\gmockd.lib
    23. 3>Generating Code...
    24. 3>gmock_main.vcxproj -> C:\DevelopProject\SourceCode\googletest\googletest-release-1.11.0\lib\Debug\gmock_maind.lib
    25. 6>------ Build started: Project: ALL_BUILD, Configuration: Debug x64 ------
    26. 6>Building Custom Rule C:/DevelopProject/SourceCode/googletest/googletest-release-1.11.0/CMakeLists.txt
    27. ========== Build: 6 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

    生成的lib:``

  • ...\lib\Debug: gmock_maind.lib, gmockd.lib, gtest_maind.lib, gtestd.lib

  • ...\lib\Release: gmock_main.lib, gmock.lib, gtest_main.lib, gtest.lib

    GCC

VS 2022

Demo_1: 跑起来

image.pngimage.png

配置

image.png
image.png
image.png

  • 设置头文件,lib路径,Runtime Library
    • C/C++->General->Additional Include Directories: ..\include
    • Linker->Input->Additional Dependencies: ..\lib\gtest_maind.lib;..\lib\gtestd.lib
    • C/C++->Code Genaration->Runtime Library: Muti-threaded Debug (/MTd)

image.png
image.png
image.png

运行

  1. #include <gtest/gtest.h>
  2. int Foo(int a, int b)
  3. {
  4. if (a == 0 || b == 0)
  5. {
  6. throw "don't do that";
  7. }
  8. int c = a % b;
  9. if (c == 0)
  10. return b;
  11. return Foo(b, c);
  12. }
  13. TEST(FooTest, HandleNoneZeroInput)
  14. {
  15. EXPECT_EQ(2, Foo(4, 10));
  16. EXPECT_EQ(6, Foo(30, 18));
  17. }

image.png

Demo_2

  1. #include <gtest/gtest.h>
  2. int main(int argc, char** argv)
  3. {
  4. testing::InitGoogleTest(&argc, argv);
  5. return RUN_ALL_TESTS();
  6. }
  1. [==========] Running 0 tests from 0 test suites.
  2. [==========] 0 tests from 0 test suites ran. (0 ms total)
  3. [ PASSED ] 0 tests.

TEST

  1. #include <gtest/gtest.h>
  2. TEST(TestName, Subtest_1)
  3. {
  4. ASSERT_TRUE(1 == 1);
  5. }
  6. int main(int argc, char** argv)
  7. {
  8. testing::InitGoogleTest(&argc, argv);
  9. return RUN_ALL_TESTS();
  10. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.Subtest_1
  5. [ OK ] TestName.Subtest_1 (0 ms)
  6. [----------] 1 test from TestName (0 ms total)
  7. [----------] Global test environment tear-down
  8. [==========] 1 test from 1 test suite ran. (1 ms total)
  9. [ PASSED ] 1 test.
  1. #include <gtest/gtest.h>
  2. TEST(TestName, Subtest_1)
  3. {
  4. ASSERT_TRUE(1 == 2);
  5. }
  6. int main(int argc, char** argv)
  7. {
  8. testing::InitGoogleTest(&argc, argv);
  9. return RUN_ALL_TESTS();
  10. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.Subtest_1
  5. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(5): error: Value of: 1 == 2
  6. Actual: false
  7. Expected: true
  8. [ FAILED ] TestName.Subtest_1 (0 ms)
  9. [----------] 1 test from TestName (1 ms total)
  10. [----------] Global test environment tear-down
  11. [==========] 1 test from 1 test suite ran. (2 ms total)
  12. [ PASSED ] 0 tests.
  13. [ FAILED ] 1 test, listed below:
  14. [ FAILED ] TestName.Subtest_1
  1. #include <gtest/gtest.h>
  2. TEST(TestName, Subtest_1)
  3. {
  4. ASSERT_TRUE(1 == 2);
  5. }
  6. TEST(TestName, Subtest_2)
  7. {
  8. ASSERT_TRUE(1 == 2);
  9. }
  10. int main(int argc, char** argv)
  11. {
  12. testing::InitGoogleTest(&argc, argv);
  13. return RUN_ALL_TESTS();
  14. }
  1. [==========] Running 2 tests from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 2 tests from TestName
  4. [ RUN ] TestName.Subtest_1
  5. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(5): error: Value of: 1 == 2
  6. Actual: false
  7. Expected: true
  8. [ FAILED ] TestName.Subtest_1 (0 ms)
  9. [ RUN ] TestName.Subtest_2
  10. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(10): error: Value of: 1 == 2
  11. Actual: false
  12. Expected: true
  13. [ FAILED ] TestName.Subtest_2 (0 ms)
  14. [----------] 2 tests from TestName (1 ms total)
  15. [----------] Global test environment tear-down
  16. [==========] 2 tests from 1 test suite ran. (2 ms total)
  17. [ PASSED ] 0 tests.
  18. [ FAILED ] 2 tests, listed below:
  19. [ FAILED ] TestName.Subtest_1
  20. [ FAILED ] TestName.Subtest_2
  1. #include <gtest/gtest.h>
  2. TEST(TestName1, Subtest_1)
  3. {
  4. ASSERT_TRUE(1 == 2);
  5. }
  6. TEST(TestName2, Subtest_1)
  7. {
  8. ASSERT_TRUE(1 == 2);
  9. }
  10. int main(int argc, char** argv)
  11. {
  12. testing::InitGoogleTest(&argc, argv);
  13. return RUN_ALL_TESTS();
  14. }
  1. [----------] Global test environment set-up.
  2. [----------] 1 test from TestName1
  3. [ RUN ] TestName1.Subtest_1
  4. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(5): error: Value of: 1 == 2
  5. Actual: false
  6. Expected: true
  7. [ FAILED ] TestName1.Subtest_1 (0 ms)
  8. [----------] 1 test from TestName1 (0 ms total)
  9. [----------] 1 test from TestName2
  10. [ RUN ] TestName2.Subtest_1
  11. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(10): error: Value of: 1 == 2
  12. Actual: false
  13. Expected: true
  14. [ FAILED ] TestName2.Subtest_1 (0 ms)
  15. [----------] 1 test from TestName2 (0 ms total)
  16. [----------] Global test environment tear-down
  17. [==========] 2 tests from 2 test suites ran. (2 ms total)
  18. [ PASSED ] 0 tests.
  19. [ FAILED ] 2 tests, listed below:
  20. [ FAILED ] TestName1.Subtest_1
  21. [ FAILED ] TestName2.Subtest_1

ASSERT

  • ASSERT_FALSE ```cpp

    include

    include

TEST(TestName1, Subtest_1) { ASSERT_FALSE(1 == 2); std::cout << “After Assertion” << std::endl; }

int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv);

  1. return RUN_ALL_TESTS();

}

  1. ```shell
  2. [==========] Running 1 test from 1 test suite.
  3. [----------] Global test environment set-up.
  4. [----------] 1 test from TestName1
  5. [ RUN ] TestName1.Subtest_1
  6. After Assertion
  7. [ OK ] TestName1.Subtest_1 (0 ms)
  8. [----------] 1 test from TestName1 (0 ms total)
  9. [----------] Global test environment tear-down
  10. [==========] 1 test from 1 test suite ran. (1 ms total)
  11. [ PASSED ] 1 test.
  • ASSERT_FALSE ```cpp

    include

    include

TEST(TestName1, Subtest_1) { ASSERT_FALSE(1 == 1); std::cout << “After Assertion” << std::endl; }

int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv);

  1. return RUN_ALL_TESTS();

}

  1. ```shell
  2. [==========] Running 1 test from 1 test suite.
  3. [----------] Global test environment set-up.
  4. [----------] 1 test from TestName1
  5. [ RUN ] TestName1.Subtest_1
  6. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(6): error: Value of: 1 == 1
  7. Actual: true
  8. Expected: false
  9. [ FAILED ] TestName1.Subtest_1 (0 ms)
  10. [----------] 1 test from TestName1 (0 ms total)
  11. [----------] Global test environment tear-down
  12. [==========] 1 test from 1 test suite ran. (1 ms total)
  13. [ PASSED ] 0 tests.
  14. [ FAILED ] 1 test, listed below:
  15. [ FAILED ] TestName1.Subtest_1
  • ASSERT_EQ ```cpp

    include

    include

TEST(TestName, Subtest_1) { ASSERT_EQ(1, 1); std::cout << “After Assertion” << std::endl; }

int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv);

  1. return RUN_ALL_TESTS();

}

  1. ```shell
  2. [==========] Running 1 test from 1 test suite.
  3. [----------] Global test environment set-up.
  4. [----------] 1 test from TestName
  5. [ RUN ] TestName.Subtest_1
  6. After Assertion
  7. [ OK ] TestName.Subtest_1 (0 ms)
  8. [----------] 1 test from TestName1 (0 ms total)
  9. [----------] Global test environment tear-down
  10. [==========] 1 test from 1 test suite ran. (1 ms total)
  11. [ PASSED ] 1 test.
  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. TEST(TestName, Subtest_1)
  4. {
  5. ASSERT_EQ(1, 2);
  6. std::cout << "After Assertion" << std::endl;
  7. }
  8. int main(int argc, char** argv)
  9. {
  10. testing::InitGoogleTest(&argc, argv);
  11. return RUN_ALL_TESTS();
  12. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.Subtest_1
  5. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(6): error: Expected equality of these values:
  6. 1
  7. 2
  8. [ FAILED ] TestName.Subtest_1 (0 ms)
  9. [----------] 1 test from TestName (0 ms total)
  10. [----------] Global test environment tear-down
  11. [==========] 1 test from 1 test suite ran. (2 ms total)
  12. [ PASSED ] 0 tests.
  13. [ FAILED ] 1 test, listed below:
  14. [ FAILED ] TestName.Subtest_1
  15. 1 FAILED TEST

EXPECT

  • EXPECT_EQ: 不会中断程序运行 ```cpp

    include

    include

TEST(TestName, Subtest_1) { EXPECT_EQ(1, 2); std::cout << “After Assertion” << std::endl; }

int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv);

  1. return RUN_ALL_TESTS();

}

  1. ```cpp
  2. [==========] Running 1 test from 1 test suite.
  3. [----------] Global test environment set-up.
  4. [----------] 1 test from TestName
  5. [ RUN ] TestName.Subtest_1
  6. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(6): error: Expected equality of these values:
  7. 1
  8. 2
  9. After Assertion
  10. [ FAILED ] TestName.Subtest_1 (0 ms)
  11. [----------] 1 test from TestName (0 ms total)
  12. [----------] Global test environment tear-down
  13. [==========] 1 test from 1 test suite ran. (1 ms total)
  14. [ PASSED ] 0 tests.
  15. [ FAILED ] 1 test, listed below:
  16. [ FAILED ] TestName.Subtest_1
  17. 1 FAILED TEST
  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. TEST(TestName, Subtest_1)
  4. {
  5. EXPECT_EQ(1, 1);
  6. std::cout << "After Assertion" << std::endl;
  7. }
  8. int main(int argc, char** argv)
  9. {
  10. testing::InitGoogleTest(&argc, argv);
  11. return RUN_ALL_TESTS();
  12. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.Subtest_1
  5. After Assertion
  6. [ OK ] TestName.Subtest_1 (0 ms)
  7. [----------] 1 test from TestName (0 ms total)
  8. [----------] Global test environment tear-down
  9. [==========] 1 test from 1 test suite ran. (1 ms total)
  10. [ PASSED ] 1 test.

Demo_3

  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. TEST(TestName, Subtest_1)
  4. {
  5. EXPECT_EQ(1, 1);
  6. EXPECT_EQ(1, 2);
  7. }
  8. int main(int argc, char** argv)
  9. {
  10. testing::InitGoogleTest(&argc, argv);
  11. return RUN_ALL_TESTS();
  12. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.Subtest_1
  5. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(7): error: Expected equality of these values:
  6. 1
  7. 2
  8. [ FAILED ] TestName.Subtest_1 (0 ms)
  9. [----------] 1 test from TestName (0 ms total)
  10. [----------] Global test environment tear-down
  11. [==========] 1 test from 1 test suite ran. (2 ms total)
  12. [ PASSED ] 0 tests.
  13. [ FAILED ] 1 test, listed below:
  14. [ FAILED ] TestName.Subtest_1

Arrange, Act, Assert

  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. TEST(TestName, Subtest_1)
  4. {
  5. // Arrange
  6. int value = 100;
  7. int increment = 5;
  8. // Act
  9. value = value + increment;
  10. // Assert
  11. ASSERT_EQ(value, 105);
  12. }
  13. int main(int argc, char** argv)
  14. {
  15. testing::InitGoogleTest(&argc, argv);
  16. return RUN_ALL_TESTS();
  17. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.Subtest_1
  5. [ OK ] TestName.Subtest_1 (0 ms)
  6. [----------] 1 test from TestName (0 ms total)
  7. [----------] Global test environment tear-down
  8. [==========] 1 test from 1 test suite ran. (1 ms total)
  9. [ PASSED ] 1 test.
  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. TEST(TestName, Subtest_1)
  4. {
  5. // Arrange
  6. int value = 100;
  7. int increment = 5;
  8. // Act
  9. value = value + increment;
  10. // Assert
  11. ASSERT_EQ(value, 107);
  12. }
  13. int main(int argc, char** argv)
  14. {
  15. testing::InitGoogleTest(&argc, argv);
  16. return RUN_ALL_TESTS();
  17. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.Subtest_1
  5. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(14): error: Expected equality of these values:
  6. value
  7. Which is: 105
  8. 107
  9. [ FAILED ] TestName.Subtest_1 (0 ms)
  10. [----------] 1 test from TestName (0 ms total)
  11. [----------] Global test environment tear-down
  12. [==========] 1 test from 1 test suite ran. (1 ms total)
  13. [ PASSED ] 0 tests.
  14. [ FAILED ] 1 test, listed below:
  15. [ FAILED ] TestName.Subtest_1
  16. 1 FAILED TEST

Demo_4:

  • 速度快
  • 独立运行
  • 不依赖额外输入 ```cpp

    include

    include

TEST(TestName, Increment_by_5) { // Arrange int value = 100; int increment = 5;

  1. // Act
  2. value = value + increment;
  3. // Assert
  4. ASSERT_EQ(value, 105);

}

TEST(TestName, Increment_by_10) { // Arrange int value = 100; int increment = 10;

  1. // Act
  2. value = value + increment;
  3. // Assert
  4. ASSERT_EQ(value, 110);

}

int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv);

  1. return RUN_ALL_TESTS();

}

  1. ```cpp
  2. [==========] Running 2 tests from 1 test suite.
  3. [----------] Global test environment set-up.
  4. [----------] 2 tests from TestName
  5. [ RUN ] TestName.Increment_by_5
  6. [ OK ] TestName.Increment_by_5 (0 ms)
  7. [ RUN ] TestName.Increment_by_10
  8. [ OK ] TestName.Increment_by_10 (0 ms)
  9. [----------] 2 tests from TestName (0 ms total)
  10. [----------] Global test environment tear-down
  11. [==========] 2 tests from 1 test suite ran. (1 ms total)
  12. [ PASSED ] 2 tests.

class

  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. class MyClass {
  4. public:
  5. MyClass(std::string _id) : id{_id}{}
  6. std::string getId() { return id; }
  7. private:
  8. std::string id;
  9. };
  10. TEST(TestName, MyClass)
  11. {
  12. // Arrange
  13. MyClass mc{"root"};
  14. // Act
  15. std::string value = mc.getId();
  16. // Assert
  17. ASSERT_EQ(value, "root");
  18. }
  19. int main(int argc, char** argv)
  20. {
  21. testing::InitGoogleTest(&argc, argv);
  22. return RUN_ALL_TESTS();
  23. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.MyClass
  5. [ OK ] TestName.MyClass (0 ms)
  6. [----------] 1 test from TestName (0 ms total)
  7. [----------] Global test environment tear-down
  8. [==========] 1 test from 1 test suite ran. (0 ms total)
  9. [ PASSED ] 1 test.

ASSERT_STREQ

  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. class MyClass {
  4. public:
  5. MyClass(std::string _id) : id{_id}{}
  6. std::string getId() { return id; }
  7. private:
  8. std::string id;
  9. };
  10. TEST(TestName, MyClass)
  11. {
  12. // Arrange
  13. MyClass mc{"root"};
  14. // Act
  15. std::string value = mc.getId();
  16. // Assert
  17. ASSERT_EQ(value.c_str(), "root");
  18. }
  19. int main(int argc, char** argv)
  20. {
  21. testing::InitGoogleTest(&argc, argv);
  22. return RUN_ALL_TESTS();
  23. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.MyClass
  5. D:\LearnProject\googletest\01_Demo_2\01_Demo_2.cpp(21): error: Expected equality of these values:
  6. value.c_str()
  7. Which is: 00000046FA52EE00
  8. "root"
  9. Which is: 00007FF6CB8DD68C
  10. [ FAILED ] TestName.MyClass (0 ms)
  11. [----------] 1 test from TestName (0 ms total)
  12. [----------] Global test environment tear-down
  13. [==========] 1 test from 1 test suite ran. (1 ms total)
  14. [ PASSED ] 0 tests.
  15. [ FAILED ] 1 test, listed below:
  16. [ FAILED ] TestName.MyClass
  17. 1 FAILED TEST
  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. class MyClass {
  4. public:
  5. MyClass(std::string _id) : id{_id}{}
  6. std::string getId() { return id; }
  7. private:
  8. std::string id;
  9. };
  10. TEST(TestName, MyClass)
  11. {
  12. // Arrange
  13. MyClass mc{"root"};
  14. // Act
  15. std::string value = mc.getId();
  16. // Assert
  17. ASSERT_STREQ(value.c_str(), "root");
  18. }
  19. int main(int argc, char** argv)
  20. {
  21. testing::InitGoogleTest(&argc, argv);
  22. return RUN_ALL_TESTS();
  23. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from TestName
  4. [ RUN ] TestName.MyClass
  5. [ OK ] TestName.MyClass (0 ms)
  6. [----------] 1 test from TestName (0 ms total)
  7. [----------] Global test environment tear-down
  8. [==========] 1 test from 1 test suite ran. (0 ms total)
  9. [ PASSED ] 1 test.

Demo_5

  1. #include <gtest/gtest.h>
  2. #include <iostream>
  3. class MyClass {
  4. public:
  5. MyClass(int _bv) : baseValue{_bv}{}
  6. void Increment(int byValue) { baseValue += byValue; }
  7. int getValue() { return baseValue; }
  8. private:
  9. int baseValue;
  10. };
  11. TEST(ClassTest, Increment_by_5)
  12. {
  13. // Arrange
  14. MyClass mc{100};
  15. // Act
  16. mc.Increment(5);
  17. // Assert
  18. ASSERT_EQ(mc.getValue(), 105);
  19. }
  20. int main(int argc, char** argv)
  21. {
  22. testing::InitGoogleTest(&argc, argv);
  23. return RUN_ALL_TESTS();
  24. }
  1. [==========] Running 1 test from 1 test suite.
  2. [----------] Global test environment set-up.
  3. [----------] 1 test from ClassTest
  4. [ RUN ] ClassTest.Increment_by_5
  5. [ OK ] ClassTest.Increment_by_5 (0 ms)
  6. [----------] 1 test from ClassTest (0 ms total)
  7. [----------] Global test environment tear-down
  8. [==========] 1 test from 1 test suite ran. (1 ms total)
  9. [ PASSED ] 1 test.
#include <gtest/gtest.h>
#include <iostream>

class MyClass {
public:
    MyClass(int _bv) : baseValue{_bv}{}
    void Increment(int byValue) { baseValue += byValue; }
    int getValue() { return baseValue; }
private:
    int baseValue;
};

TEST(ClassTest, Increment_by_5)
{
    // Arrange
    MyClass mc{100};

    // Act
    mc.Increment(5);

    // Assert
    ASSERT_EQ(mc.getValue(), 105);
}

TEST(ClassTest, Increment_by_10)
{
    // Arrange
    MyClass mc{ 100 };

    // Act
    mc.Increment(10);

    // Assert
    ASSERT_EQ(mc.getValue(), 110);
}


int main(int argc, char** argv) 
{
    testing::InitGoogleTest(&argc, argv);

    return RUN_ALL_TESTS();
}
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from ClassTest
[ RUN      ] ClassTest.Increment_by_5
[       OK ] ClassTest.Increment_by_5 (0 ms)
[ RUN      ] ClassTest.Increment_by_10
[       OK ] ClassTest.Increment_by_10 (0 ms)
[----------] 2 tests from ClassTest (0 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (1 ms total)
[  PASSED  ] 2 tests.

Test Fixtures

#include <gtest/gtest.h>
#include <iostream>

class MyClass {
public:
    MyClass(int _bv) : baseValue{_bv}{}
    void Increment(int byValue) { baseValue += byValue; }
    int getValue() { return baseValue; }
private:
    int baseValue;
};

struct MyClassTest : public testing::Test
{
    MyClass* mc;
    void SetUp() { mc = new MyClass(100); }
    void TearDown() { delete mc; }
};

TEST_F(MyClassTest, Increment_by_5)
{
    // Act
    mc->Increment(5);

    // Assert
    ASSERT_EQ(mc->getValue(), 105);
}

TEST_F(MyClassTest, Increment_by_10)
{
    // Act
    mc->Increment(10);

    // Assert
    ASSERT_EQ(mc->getValue(), 110);
}



int main(int argc, char** argv) 
{
    testing::InitGoogleTest(&argc, argv);

    return RUN_ALL_TESTS();
}
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from MyClassTest
[ RUN      ] MyClassTest.Increment_by_5
[       OK ] MyClassTest.Increment_by_5 (0 ms)
[ RUN      ] MyClassTest.Increment_by_10
[       OK ] MyClassTest.Increment_by_10 (0 ms)
[----------] 2 tests from MyClassTest (0 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (1 ms total)
[  PASSED  ] 2 tests.
#include <gtest/gtest.h>
#include <iostream>

using std::cout;

class MyClass {
public:
    MyClass(int _bv) : baseValue{_bv}{}
    void Increment(int byValue) { baseValue += byValue; }
    int getValue() { return baseValue; }
private:
    int baseValue;
};

struct MyClassTest : public testing::Test
{
    MyClass* mc;
    void SetUp() { cout << "Alice\n"; mc = new MyClass(100); }
    void TearDown() { cout << "Dead\n"; delete mc; }
};

TEST_F(MyClassTest, Increment_by_5)
{
    // Act
    mc->Increment(5);

    // Assert
    ASSERT_EQ(mc->getValue(), 105);
}

TEST_F(MyClassTest, Increment_by_10)
{
    // Act
    mc->Increment(10);

    // Assert
    ASSERT_EQ(mc->getValue(), 110);
}


int main(int argc, char** argv) 
{
    testing::InitGoogleTest(&argc, argv);

    return RUN_ALL_TESTS();
}
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from MyClassTest
[ RUN      ] MyClassTest.Increment_by_5
Alice
Dead
[       OK ] MyClassTest.Increment_by_5 (0 ms)
[ RUN      ] MyClassTest.Increment_by_10
Alice
Dead
[       OK ] MyClassTest.Increment_by_10 (0 ms)
[----------] 2 tests from MyClassTest (0 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (1 ms total)
[  PASSED  ] 2 tests.

Demo_6

image.png

  • 通过配置编译参数gtest_main,可以不使用main函数 ```cpp

    include

    include

    include

using namespace testing;

class Foo { public: virtual int count() = 0; };

class MockFoo : public Foo { public: MOCK_METHOD0(count, int()); };

class Bar { public: Bar(Foo* foo) : m_foo(foo) { } int count() { return m_foo->count(); }

private: Foo* m_foo; };

TEST(BarTest, mock_foo_in_bar) { MockFoo mockFoo = new MockFoo(); Bar bar = new Bar(mockFoo);

EXPECT_CALL(*mockFoo, count())
    .Times(3)
    .WillOnce(Return(3))
    .WillOnce(Return(6))
    .WillOnce(Return(5));

EXPECT_EQ(bar->count(), 3);
EXPECT_EQ(bar->count(), 6);
EXPECT_EQ(bar->count(), 5);

delete bar;
delete mockFoo;

}

```cpp
Running main() from ***\src\gtest_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from BarTest
[ RUN      ] BarTest.mock_foo_in_bar
[       OK ] BarTest.mock_foo_in_bar (0 ms)
[----------] 1 test from BarTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1 ms total)
[  PASSED  ] 1 test.

Demo_7

#include <gtest/gtest.h>
#include <iostream>

int func_to_be_tested(int a, int b) {
    return a - b;
}

class TestSuite : public ::testing::Test {
protected:
    void SetUp() override {
        // some setup
        std::cout << "Alive\n";
    }
    void TearDown() override {
        // some tear down
        std::cout << "Dead\n";
    }
};

TEST_F(TestSuite, TestCaseName) {
    EXPECT_EQ(1, func_to_be_tested(3, 2));
}
Running main() from ***\src\gtest_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from TestSuite
[ RUN      ] TestSuite.TestCaseName
Alive
Dead
[       OK ] TestSuite.TestCaseName (0 ms)
[----------] 1 test from TestSuite (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1 ms total)
[  PASSED  ] 1 test.