C++ Academy · Pelajaran

Assertion dan Matcher

Tulis pemeriksaan yang ekspresif

Pelajaran 2 dari 413 langkah

Assertion dan Matcher adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Pernyataan Menyatakan Ekspektasi

Pernyataan GTest memeriksa kondisi di dalam pengujian. Pernyataan tersebut memiliki dua tingkat keparahan.

  • EXPECT_*: kegagalan dicatat, pengujian berlanjut
  • ASSERT_*: kegagalan langsung menghentikan pengujian saat ini

EXPECT vs ASSERT

Gunakan ASSERT_* ketika melanjutkan pengujian dapat menyebabkan kerusakan, misalnya setelah pemeriksaan null, dan gunakan EXPECT_* dalam situasi lain agar semua kegagalan dapat dilihat sekaligus.

#include <gtest/gtest.h>

TEST(Demo, MixedChecks) {
    int* p = new int(5);
    ASSERT_NE(p, nullptr);
    EXPECT_EQ(*p, 5);
    delete p;
}

Pernyataan Perbandingan

Makro perbandingan utama:

  • EXPECT_EQ, EXPECT_NE
  • EXPECT_LT, EXPECT_LE
  • EXPECT_GT, EXPECT_GE
#include <gtest/gtest.h>

TEST(Compare, Numbers) {
    EXPECT_LT(2, 3);
    EXPECT_GE(5, 5);
}

Pernyataan Boolean

EXPECT_TRUE dan EXPECT_FALSE memeriksa kondisi boolean secara langsung.

#include <gtest/gtest.h>

bool is_even(int n) { return n % 2 == 0; }

TEST(Bool, Even) {
    EXPECT_TRUE(is_even(4));
    EXPECT_FALSE(is_even(3));
}

Perbandingan Bilangan Titik Mengambang

Jangan pernah menggunakan EXPECT_EQ pada bilangan titik mengambang. Gunakan EXPECT_FLOAT_EQ, EXPECT_DOUBLE_EQ, atau EXPECT_NEAR dengan toleransi.

#include <gtest/gtest.h>

TEST(Floats, Approx) {
    EXPECT_DOUBLE_EQ(0.1 + 0.2, 0.3);
    EXPECT_NEAR(3.14159, 3.14, 0.01);
}

Pernyataan String

Untuk string C, gunakan EXPECT_STREQ / EXPECT_STRNE. Untuk std::string, EXPECT_EQ dapat digunakan karena perbandingan dilakukan berdasarkan nilai.

#include <gtest/gtest.h>
#include <string>

TEST(Strings, Compare) {
    EXPECT_STREQ("hi", "hi");
    EXPECT_EQ(std::string("ok"), "ok");
}

Pernyataan Pengecualian

Verifikasi bahwa kode melempar pengecualian yang diharapkan.

#include <gtest/gtest.h>
#include <stdexcept>

void check(int n) {
    if (n < 0) throw std::runtime_error("neg");
}

TEST(Throws, Negative) {
    EXPECT_THROW(check(-1), std::runtime_error);
    EXPECT_NO_THROW(check(1));
}

Pesan Kegagalan Khusus

Alirkan konteks tambahan ke dalam pernyataan dengan << agar kegagalan lebih mudah didiagnosis.

#include <gtest/gtest.h>

TEST(Message, WithContext) {
    int x = 7;
    EXPECT_EQ(x, 7) << "x had unexpected value " << x;
}

Pencocok GMock dengan EXPECT_THAT

EXPECT_THAT menggabungkan nilai dengan pencocok untuk pemeriksaan yang ekspresif, misalnya EXPECT_THAT(v, ElementsAre(1, 2, 3)).

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <vector>
using ::testing::ElementsAre;

TEST(Matchers, Vector) {
    std::vector<int> v{1, 2, 3};
    EXPECT_THAT(v, ElementsAre(1, 2, 3));
}

Pencocok yang Berguna

Pencocok yang umum meliputi:

  • Eq, Ne, Gt, Lt
  • Contains, ElementsAre, UnorderedElementsAre
  • HasSubstr, StartsWith, EndsWith

Memilih Pernyataan yang Tepat

Utamakan pernyataan yang paling spesifik: pernyataan ini menghasilkan pesan kegagalan yang lebih jelas daripada EXPECT_TRUE generik. EXPECT_EQ(a, b) mencetak kedua nilai; EXPECT_TRUE(a == b) tidak.

Pemeriksaan Singkat

Ingat kembali perbedaan EXPECT dan ASSERT.

Rangkuman

Anda telah mempelajari pernyataan GTest.

  • EXPECT_* melanjutkan pengujian; ASSERT_* membatalkan pengujian
  • Makro perbandingan, boolean, bilangan titik mengambang, string, dan pengecualian
  • Alirkan konteks tambahan dengan <<
  • EXPECT_THAT + pencocok untuk pemeriksaan yang ekspresif
Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Assertion dan Matcher” gratis?

Ya — teks lengkap “Assertion dan Matcher” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Assertion dan Matcher”?

Tulis pemeriksaan yang ekspresif Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Assertion dan Matcher” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menyiapkan GTest
  2. Assertion dan Matcher
  3. Fixture dan Penyiapan
  4. Mocking dengan GMock
← Kembali ke C++ Academy