use gtest and gmock

installation on linux mint

sudo apt search gtest googletest gmock # first search and then install the -dev version

use gtest and gmock demo

file structure

ls -Rar
Test.cpp
Test
readme.md
cases.hpp	

cases.hpp

#include 
#include 
#include 

#define IMPL
#define INTERFACE_SECTION
#define USE_CLASS
#define USE_GMOCK

#ifdef USE_CLASS // class api decl and impl zone
class C_ForTest  // class C_ForTest
{
public:
  C_ForTest() = default;
  virtual ~C_ForTest() = default;

public:
  virtual const char *run_test() = 0;
};

class Sample : public C_ForTest // class Sample
{
public:
  Sample() = default;
  ~Sample() = default;

public:
  const char *run_test() override { return "sample done"; }
};
#endif

#ifdef INTERFACE_SECTION // simple api decl
int sum2Int(int a, int b);
char *sayMyName(char *name);
#endif

#ifdef IMPL               // simple api impl
int sum2Int(int a, int b) // sum2Int
{
  return a + b;
}

const char *sayMyName(const char *name) // sayMyName
{
  return name;
}
#endif

#ifdef USE_GMOCK // use gmock
class User {
public:
  virtual int getAge() = 0;
};

class MockUser : public User {// must inheritate
public:
  MOCK_METHOD(int, getAge, (), (override));
};
#endif

Test.cpp

#include "cases.hpp"
#include 
#include 

using std::cout;

namespace // 简单测试
{
TEST(TEST_GOURP_NAME, SubTest1) {
  ASSERT_TRUE(true);
  //    EXPECT_EQ(1,2);
  EXPECT_NE(1, 2);
  ASSERT_EQ(1, sum2Int(0, 1));
}

TEST(TEST_GRP2, isOne) {
  ASSERT_FALSE(1 < 0); // the condition will be false
  ASSERT_EQ(1 == 1, true) << "1==1 is passed";
}

TEST(T_3, isName) { ASSERT_EQ("etcix", sayMyName("etcix")); }

TEST(T_Class, withClass) {
  Sample sample{};
  auto res = sample.run_test();
  ASSERT_EQ("sample done", res);
}

} // end namespace

namespace // 复杂测试组
{
TEST(COMPLEX_TEST_G1, some_value) { ASSERT_EQ(1, 1); }

TEST(COMPLEX_TEST_G1, what_ever) { ASSERT_NE(1, 2); }
} // namespace

namespace {
TEST(mockUser, mock1) {
  MockUser user;
  EXPECT_CALL(user, getAge)
      .Times(::testing::AtLeast(3)) // at least call user.getAge 3 times
      .WillOnce(::testing::Return(200))
      .WillOnce(::testing::Return(300))
      .WillRepeatedly(::testing::Return(500));

  std::cout << user.getAge() << std::endl;
  std::cout << user.getAge() << std::endl;
  std::cout << user.getAge() << std::endl;
  std::cout << user.getAge() << std::endl;
  std::cout << user.getAge() << std::endl;
}
} // namespace

int main(int argc, char **argv) {
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
  // g++ Test.cpp -o Test -lgtest -lgtest_main -lpthread
}

compile and run

g++ Test.cpp -o Test -lgtest -lgtest_main -lgmock -lpthread
./Test

你可能感兴趣的:(框架s,c++,开发语言)