Ubuntu下Google Test的安裝與示例

  這裏介紹在Ubuntu下安裝Google Test的一種簡便方法,如果大家要用最新版,可以去相關網站上下載最新源碼。
 
環境:Ubuntu 16.04 64位桌面版
 
1. 安裝libgtest-dev;

sudo apt install libgtest-dev -y

 
2. 編譯

cd /usr/src/gtest/
sudo cmake CMakeLists.txt
sudo make

  通過以上步驟後,會在/usr/src/gtest/目錄下生成庫文件:libgtest_main.a與libgtest.a。把二者複製到/usr/local/lib/目錄下:

sudo cp libgtest*.a /usr/local/lib

 
  好了,現在我們寫一個小例子來試試。
 
a) game.h

#ifndef AGILE_GAME_H_
#define AGILE_GAME_H_

class Game {
 public:
  int Score(void);
  void Add(int pins);
  int ScoreForFrame(int frame);
 private:
  int its_score_ = 0;
  int its_throws_[21];
  int its_current_throw_ = 0;
};

#endif  // AGILE_GAME_H_

 
b) game.cpp

# include "game.h"

int Game::Score(void) {
  return its_score_;
}

void Game::Add(int pins) {
  its_throws_[its_current_throw_++] = pins;
  its_score_ += pins;
  return;
}

int Game::ScoreForFrame(int frame) {
  int score = 0;
  for (int ball = 0; frame > 0 && (ball < its_current_throw_);
       ball += 2, frame--) {
    score += its_throws_[ball] + its_throws_[ball + 1];
  }
  return score;
}

 
c) test_game.cpp

#include <gtest/gtest.h>
#include "game.cpp"

class TestGame : public ::testing::Test {
 protected:
  TestGame() : game_() {
  }

  Game game_;
};

TEST_F(TestGame, TestOneThrows) {
  game_.Add(5);
  ASSERT_EQ(5, game_.Score());
}

TEST_F(TestGame, TestTwoThrowsNoMark) {
  game_.Add(5);
  game_.Add(4);
  ASSERT_EQ(9, game_.Score());
}

TEST_F(TestGame, TestFourThrowsNoMark) {
  game_.Add(5);
  game_.Add(4);
  game_.Add(7);
  game_.Add(2);
  ASSERT_EQ(18, game_.Score());
  ASSERT_EQ(19, game_.ScoreForFrame(1));  // 故意寫錯的
  ASSERT_EQ(18, game_.ScoreForFrame(2));
}

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

編譯:

g++ test_game.cpp -o test_game -lgtest -lpthread --std=c++11

執行生成的test_game文件:

./test_game

結果如下:
Ubuntu下Google Test的安裝與示例
測試代碼中有一行的測試是故意打錯的,是爲了看看測試失敗時的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章