Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menguji unit perpustakaan fungsi C++?

Bagaimana untuk menguji unit perpustakaan fungsi C++?

WBOY
WBOYasal
2024-04-19 08:27:01812semak imbas

Menggunakan Ujian Google untuk ujian unit dalam pustaka fungsi C++ boleh memastikan kebolehpercayaannya Langkah-langkah khusus adalah seperti berikut: Pasang Ujian Google untuk membuat ujian unit untuk pustaka fungsi: Buat fail ".test.cpp" dan sertakan Ujian Google. definisi pengepala yang diwarisi daripada:: Kelas ujian kes ujian::Ujian mencipta kaedah ujian bermula dengan TEST Jalankan ujian unit: gunakan fail boleh laku gtest dan masukkan fail kes ujian Gunakan makro penegasan lain: ASSERT_EQ (batalkan ujian), ASSERT_TRUE/ASSERT_FALSE (semak syarat), ASSERT_THROW (Semak pengecualian yang dilemparkan)

C++ 函数库如何进行单元测试?

Cara ujian unit dalam perpustakaan fungsi C++

Pengenalan
kebolehpercayaan fungsiUnit perpustakaan. Salah satu rangka kerja ujian unit yang biasa digunakan dalam C++ ialah Google Test, yang menyediakan satu set makro dan fungsi yang memudahkan proses ujian. Artikel ini akan membimbing anda tentang cara menggunakan Ujian Google untuk ujian unit dalam pustaka C++.

Pasang Google Test
Google Test boleh dipasang dari sumber menggunakan arahan berikut:

git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake .. -Dgtest_build_samples=ON
make

Sediakan ujian unit
Untuk menulis ujian unit bagi perpustakaan fungsi, ikuti langkah berikut:

    Create a test
  1. kes yang mengandungi fail baharu, biasanya berakhir dengan ".test.cpp".
  2. Panggil #includef8f95929f1e271b6664bf075820e4e6d untuk memasukkan pengepala Ujian Google. #includef8f95929f1e271b6664bf075820e4e6d 包含 Google Test 标题。
  3. 定义一个测试用例类,该类继承自 ::testing::Test 基类。
  4. 在测试用例类中创建测试方法,方法名称以 TEST 开头。

实战案例:测试一个简单的函数
考虑一个名为 factorial 的函数,该函数计算给定非负整数的阶乘。让我们编写一个单元测试来测试此函数:

#include "factorial.h"
#include "gtest/gtest.h"

TEST(FactorialTest, BasicTest) {
  EXPECT_EQ(1, factorial(0));
  EXPECT_EQ(1, factorial(1));
  EXPECT_EQ(2, factorial(2));
  EXPECT_EQ(6, factorial(3));
  EXPECT_EQ(24, factorial(4));
}

在这个测试用例中:

  • TEST(FactorialTest, BasicTest) 定义了一个名为 BasicTest 的测试方法。
  • EXPECT_EQ 宏用于比较预期结果与实际结果。

运行单元测试
要运行单元测试,请使用 gtest 可执行文件。传入测试用例文件作为参数:

./gtest tests.test.cpp

输出将显示通过和失败的测试用例。

其他断言宏
Google Test 提供了其他断言宏,例如:

  • ASSERT_EQ:与 EXPECT_EQ 类似,但失败时中止测试。
  • ASSERT_TRUEASSERT_FALSE:分别检查条件是否为 true 或 false。
  • ASSERT_THROW
  • Tentukan kelas kes ujian, yang mewarisi daripada kelas asas ::testing::Test.

Buat kaedah ujian dalam kelas kes ujian, dengan nama kaedah bermula dengan UJIAN.
Kes praktikal: menguji fungsi mudah

🎜Pertimbangkan fungsi yang dipanggil faktorial yang mengira faktorial integer bukan negatif yang diberikan. Mari tulis ujian unit untuk menguji fungsi ini: 🎜rrreee🎜Dalam kes ujian ini: 🎜
    🎜TEST(FactorialTest, BasicTest) mentakrifkan fail yang dipanggil BasicTest kaedah ujian . 🎜🎜 makroEXPECT_EQ digunakan untuk membandingkan hasil yang dijangkakan dengan hasil sebenar. 🎜🎜🎜🎜Menjalankan Ujian Unit🎜🎜Untuk menjalankan ujian unit, gunakan gtest boleh laku. Lulus dalam fail kes ujian sebagai hujah: 🎜rrreee🎜Output akan menunjukkan kes ujian lulus dan gagal. 🎜🎜🎜Makro penegasan lain🎜🎜Google Test menyediakan makro penegasan lain, seperti: 🎜
      🎜ASSERT_EQ: Sama seperti EXPECT_EQ, tetapi membatalkan ujian apabila gagal. 🎜🎜ASSERT_TRUE dan ASSERT_FALSE: Semak sama ada syarat itu benar atau palsu. 🎜🎜ASSERT_THROW: Semak sama ada fungsi panggilan membuang pengecualian yang ditentukan. 🎜🎜🎜🎜Kesimpulan🎜🎜 Ujian unit dalam perpustakaan C++ sangat mudah menggunakan Ujian Google. Dengan mengikut langkah yang digariskan dalam artikel ini, anda boleh menulis ujian unit yang mantap dan boleh dipercayai yang memastikan pustaka anda berfungsi seperti yang diharapkan. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menguji unit perpustakaan fungsi C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn