C++
ASSERT vs EXPECT
ASSERT_ ve EXPECT_ makrolarını öğrenirsin.
ASSERT ve EXPECT farkı
GoogleTest'te iki tür assertion ailesi vardır. EXPECT_ makroları başarısızlıkta testi devam ettirir; ASSERT_ makroları ise testi hemen durdurur. İkisi de aynı denetimleri sağlar (EQ, TRUE, FALSE vb.).
İlke şudur: bir önkoşul sağlanmazsa ve gerisi anlamsızsa ASSERT_ kullan; yoksa EXPECT_ tercih et. Örnek: ASSERT_NE(ptr, nullptr) ile işaretçinin null olmadığını denetlersin; null'sa sonraki satırlar çöker, bu yüzden test durur. EXPECT_EQ(result, 42) ise yalnızca bir değer denetimi yapar; başarısızsa bile test devam edip diğer denetimleri de raporlar.
Yaygın assertion makroları
Her iki aile de aynı denetim türlerini sunar. EQ eşitlik, NE eşitsizlik, TRUE doğruluk, FALSE yanlışlık, LT/LE/GT/GE sıralama (<, <=, >, >=) için. Dize denetiminde STREQ ve STRNE kullanılır.
Örnek: ASSERT_GE(score, 0) score'un negatif olmadığını denetler ve negatifse testi durdurur. EXPECT_LT(price, maxPrice) fiyatın üst sınırdan küçük olduğunu denetler ve başarısızsa bile teste devam eder. Hangi aileyi seçeceğin, sonraki satırların anlamlı olup olmamasına bağlıdır.
Uygulama ASSERT ve EXPECT kullan
divide(int a, int b) fonksiyonunu tanımla: ASSERT_NE(b, 0) yerine fonksiyon içinde b == 0 ise 0 döndür. TEST(DivTest, NonZero) makrosu içinde önce ASSERT_NE(b, 0) yerine ASSERT_TRUE(b != 0) çağır, sonra EXPECT_EQ(divide(10, 2), 5) çağır. main içinde std::cout << "test: hazır"; yaz.
Örnek çözümü göster
#include <iostream>
#include <gtest/gtest.h>
int divide(int a, int b) {
if (b == 0) return 0;
return a / b;
}
TEST(DivTest, NonZero) {
int b = 2;
ASSERT_TRUE(b != 0);
EXPECT_EQ(divide(10, 2), 5);
}
int main(int argc, char** argv) {
std::cout << "test: hazır";
return 0;
}
Kendini test et
-
ASSERT_EQ başarısız olursa ne olur?
- Test atlanır
- Yalnızca uyarı verilir
- Test hemen durur
- Sonraki test beklenir
Cevabı göster
Test hemen durur — ASSERT_ başarısızlığında test hemen durur; sonraki satırlar çalışmaz.
-
Makroyu davranışına eşle
- EXPECT_EQ
- Başarısızlıkta devam eder
- ASSERT_EQ
- Başarısızlıkta durur
- ASSERT_NE
- Eşit değilse geçer
- EXPECT_TRUE
- Doğruysa geçer
-
Önkoşul makrosunu tamamla
ASSERT_TRUE(ready);
EXPECT_EQ(value, ____);
Cevabı göster
ASSERT_TRUE(ready);
EXPECT_EQ(value, 42);
Sıradaki ders: Test fixture