這裏介紹在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
結果如下:
測試代碼中有一行的測試是故意打錯的,是爲了看看測試失敗時的效果。