Test fixture
- C++ kursu
- İleri seviye
- Ders 40/83
- 5 dk
Test fixture ile ortak kurulum öğrenirsin.
Test fixture nedir?
Birden çok test aynı kurulum kodunu kullanıyorsa, bunu tekrarlamak yerine bir test fixture tanımlarsın. Fixture, ::testing::Test sınıfından türetilir ve SetUp() / TearDown() metotları içerir. Her test öncesi SetUp, sonrası TearDown çalışır.
Fixture kullanan testler TEST yerine TEST_F(FixtureAdi, TestAdi) makrosuyla yazılır. Örnek: class CalcTest : public ::testing::Test { protected: void SetUp() override { calc = new Calculator(); } Calculator* calc; };. Sonra TEST_F(CalcTest, Starts) { ... } yazarsın. Bu, her testin temiz bir kurulumla başlamasını sağlar.
SetUp ve TearDown yaşam döngüsü
Fixture sınıfında SetUp() her testten önce, TearDown() her testten sonra çağrılır. SetUp'ta kaynakları (nesne, dosya, bağlantı) hazırlarsın; TearDown'ta bunları temizlersin. Böylece testler birbirinden bağımsız olur.
Örnek: void SetUp() override { list.clear(); list.push_back(1); }. Her test başlarken liste {1} olur. void TearDown() override { list.clear(); } ile test bitince liste boşaltılır. Üyeler protected: yapılır ki testler erişebilsin. Bu, her testin aynı başlangıç durumunda çalışmasını sağlar.
Uygulama CalcTest fixture yaz
CalcTest fixture sınıfını ::testing::Test'ten türet. protected: bölümünde void SetUp() override tanımla ve int value = 42; ataması yapsın; int value; üyesi olsun. TEST_F(CalcTest, HasValue) makrosu içinde EXPECT_EQ(value, 42) çağır. main içinde std::cout << "test: hazır"; yaz.
Başlangıç kodu
#include <iostream>
#include <gtest/gtest.h>
// CalcTest fixture sınıfını tanımla
// CalcTest için TEST_F makrosu ekle
int main(int argc, char** argv) {
std::cout << "test: hazır";
return 0;
}Örnek çözüm
#include <iostream>
#include <gtest/gtest.h>
class CalcTest : public ::testing::Test {
protected:
void SetUp() override {
value = 42;
}
int value;
};
TEST_F(CalcTest, HasValue) {
EXPECT_EQ(value, 42);
}
int main(int argc, char** argv) {
std::cout << "test: hazır";
return 0;
}Beklenen çıktı
test: hazır
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 TEST_F ne zaman TEST yerine kullanılır?
- Testi daha hızlı çalıştırmak için
- Tek test yazıldığında
- Çıktıyı renklendirmek için
- Testler shared setup paylaştığında Doğru cevap
Açıklama: TEST_F, shared setup olan fixture sınıflarıyla kullanılır.
2 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
class CalcTest : public ::testing::Test |
Fixture sınıfı |
void SetUp() override |
Her test öncesi çalışır |
void TearDown() override |
Her test sonrası çalışır |
TEST_F(CalcTest, Name) |
Fixture'lı test |
3 SetUp metodunu tamamla
void ____() override {
value = 42;
}
void SetUp() override {
value = 42;
}
Açıklama: SetUp metodu her testten önce değer ataması yapar.