Google Test là Framework phát triển bởi Google dùng để thực hiện Unit test cho ngôn ngữ C/C++ (ai chưa rõ Unit Test là gì thì có thể tìm hiểu thêm tại đây). Google Test hỗ trợ nhiều nền tảng như Linux, Windows, MacOS X, Symbian, … và cho phép thực hiện Unit test dễ dàng hơn nhờ công cụ tạo dummy code rất mạnh mẽ là Google Mock.
Trong phạm vi bài viết này mình sẽ hướng dẫn anh em setup và sử dụng Google Test trên Ubuntu 14.04 (các phiên khác của Linux như Ubuntu 12.04, 16.04 hoặc Centos… cũng thực hiện tương tự).
Các bước thực hiện như sau →1. Install source package của Gtest
Trên terminal gõ lệnh sau →
1 |
sudo apt-get install libgtest-dev |
Sau khi kết thục lệnh này, source code của Gtest sẽ được download về đường dẫn /usr/src/gtest. Việc tiếp theo là build thư viện Gtest từ source code này.
2. Build thư viện Gtest
Cài đặt cmake →
1 |
sudo apt-get install cmake |
1 2 3 |
cd /usr/src/gtest sudo cmake CMakeLists.txt sudo make |
![](https://www.cppdeveloper.com/wp-content/uploads/2018/06/build-gtest-library.png)
1 |
sudo cp *.a /usr/lib |
3. Thực hiện Unit test với Gtest
Giả sử chúng ta cần thực hiện Unit test cho hàm tính diện tích hình vuông như sau →
1 2 3 |
// function_need_to_test.h int retangleArea(int width, int height); |
1 2 3 4 5 6 7 8 9 10 11 12 |
// function_need_to_test.cpp #include "function_need_to_test.h" int retangleArea(int width, int height) { int area = 0; if (width > 0 && height > 0) { area = width*height; } return area; } |
Tiếp theo tạo file test.cpp, trong này ta sẽ thực hiện 2 hàm test (gọi là 2 TESTS) đơn giản, một TEST cho các trường hợp tham số không hợp lệ, 1 TEST cho các tham số hợp lệ →
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// test.cpp #include "function_need_to_test.h" #include <gtest/gtest.h> TEST (RetangleAreaTest, InvalidParam) { EXPECT_EQ(0, retangleArea(-1, 5)); EXPECT_EQ(0, retangleArea(10, -2)); EXPECT_EQ(0, retangleArea(0, 0)); } TEST(RetangleAreaTest, ValidParam) { EXPECT_EQ(20, retangleArea(4, 5)); EXPECT_EQ(10, retangleArea(5, 2)); EXPECT_EQ(56, retangleArea(7, 8)); } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } |
1 2 3 4 5 6 7 8 9 10 |
cmake_minimum_required(VERSION 2.6) # Locate GTest find_package(GTest REQUIRED) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${GTEST_INCLUDE_DIRS}) # Link runTests with what we want to test and the GTest and pthread library add_executable(runTests test.cpp function_need_to_test.cpp) target_link_libraries(runTests ${GTEST_LIBRARIES} pthread) |
4. Build và chạy Unit test
Di chuyển vào folder /home/tuanpm3/Gtest →
1 |
cd /home/tuanpm3/Gtest/ |
1 |
mkdir build |
1 2 |
cd build cmake ../ # khi cmake phai chi duong dan den Folder chua file CMakeLists.txt |
Sau khi kết thúc lệnh cmake thì bên trong folder build đã có Makefile. Việc bây giờ là make để build file chạy →
1 |
make |
![](https://www.cppdeveloper.com/wp-content/uploads/2018/06/build-gtest-example.png)
1 |
./runTests |
![](https://www.cppdeveloper.com/wp-content/uploads/2018/06/run-gtest-example.png)
— Author: Phạm Minh Tuấn —
DEV quèn có tâm