Google Test Kullanımı

Google Test Kullanımı

Google Test Kullanımı nasıl yapılır? Bu rehberimiz size Google Test aracını kullanarak web sitenizin SEO performansını nasıl ölçeceğiniz hakkında ipuçları sunar En doğru sonuçları almak için makalemizi mutlaka okuyun!

Google Test Kullanımı

Google Test, C++ projelerinde test case'leri oluşturmak için kullanılan bir test çerçevesidir. Bu test çerçevesi, kullanışlı ve kolay bir arayüz sunarak test yazmayı daha kolay hale getirir. Google Test, C++ geliştiricilerinin kodlarını test etmeleri için kolay bir çözümdür. Bu test aracı, C++ projelerini test etmek için oluşturulan test case'lerin otomatik olarak yürütülmesini sağlar.

Google Test, C++ projelerinde test case'lerini oluşturmak için koşullu ifadeler, döngüler ve diğer C++ dil özellikleri kullanılabilir. Test case'ler, fonksiyonlar, sınıflar ve hatta nesne örnekleri için oluşturulabilir. Google Test testleri, kodun doğruluğunu ve kalitesini artırmak için önemlidir ve C++ kodlarının güvenilirliğini artırmada yardımcıdır. Test yazmak, geliştiricilerin kodlarının doğru çalışmasını garanti altına almalarına ve hataları saptamalarına yardımcı olur.


Google Test Nedir?

Google Test, C++ projelerinde kullanılmak üzere açık kaynak kodlu bir test çerçevesidir. Bu kütüphane sayesinde C++ projelerinizi test etmek ve hata ayıklamak daha kolay hale gelir. Google Test, ASSERT ve EXPECT makrolarını kullanarak test case'lerinizi otomatik olarak çalıştırır ve sonuçlarını raporlar.

Google Test kütüphanesi, diğer test çerçevelerine göre daha esnek bir yapı sunar. Birden fazla test case'ini tek bir kaynak dosyasına yerleştirebilirsiniz ve kullanımı oldukça kolaydır. Ayrıca, Google Test'in geliştirme ekibi tarafından sağlanan kapsamlı belgeleri ve örnekleri vardır.

Google Test, kullanıcılara özelleştirilebilir çıktı seçenekleri sunar. Konsol çıktısı, XML dosyası, Google Test sonuçları için makine okunur bir dosya ve HTML dosya formatı gibi farklı seçenekler arasından seçim yapabilirsiniz.

Bu kütüphane, C++ projeleri için test case'leri oluşturmak isteyen herkes için oldukça faydalı olabilir. Google Test kütüphanesi hakkında daha fazla bilgi edinmek için, resmi web sitesini ziyaret edebilirsiniz.


Google Test Kurulumu

Google Test'in kullanımı için ilk adım, kütüphane kurulumudur. Kurulum işlemi oldukça basittir ve resmi Google Test web sitesinde ayrıntılı olarak anlatılmıştır. Google Test'in kurulumu için aşağıdaki adımların izlenmesi gerekmektedir:

  • İlk olarak, Google Test'in en son sürümünü indirmek için resmi Google Test deposuna erişin.
  • Dosyaları indirdikten sonra, dosyaları bir klasöre çıkarın.
  • Dosyaları çıkardıktan sonra, cmake veya make komutlarını kullanarak kütüphaneyi derleyin.
  • Derleme işlemi tamamlandıktan sonra, artık Google Test kullanıma hazırdır.

Ayrıca, Google Test projesindeki dosya düzeni de oldukça önemlidir. Proje, genellikle üç bölümden oluşur: test kodları, üretim kodu ve bir test runner uygulaması. Test kodları, başlık dosyaları ve implementasyon dosyaları olarak iki ayrı klasörde tutulur. Üretim kodu ise kendi klasöründe saklanır ve kütüphane ya da uygulama olarak kullanılır. Test runner uygulaması, testlerin toplu çalıştırılması için kullanılır.

Bu dosya düzeni, projenin daha iyi yönetilmesine ve bakımının daha kolay olmasına yardımcı olur. Dosya isimleri ve klasör yapısı, kütüphane veya uygulama türüne göre farklılık gösterebilir. Ancak, proje genellikle bu üç bölümden oluşur ve bu dosya düzeni, Google Test kullanıcılarının alışkın olduğu standardizasyona uygun olarak oluşturulmuştur.

Google Test kurulumu ve dosya düzeni hakkında daha fazla bilgi için, resmi Google Test web sitesini ziyaret etmeniz önerilir.


Test Case Oluşturma

Google Test'in temel amacı C++ kodlarında hata olup olmadığını kontrol etmektir. Bunun için test case'leri oluşturmak gerekir. Test case'leri, sırasıyla, setup, exercise ve verify aşamalarını içeren üç kısımdan oluşur. Bu kısımları ayrı ayrı yazmak yararlıdır.

Test case'lerinin oluşturulmasında en önemli şey ASSERT veya EXPECT makrolarının kullanımıdır. Bir test case içinde en az bir ASSERT veya EXPECT ifadesi bulunmalıdır. ASSERT ifadesi, koşulun kesinlikle doğru olduğunu belirtirken EXPECT ifadesi, koşulun doğru olmasının beklendiğini belirtir.

Bununla birlikte, kodların doğru şekilde çalıştığından emin olmak için diğer makrolar da kullanılabilir. Örneğin, ASSERT_EQ(a,b) ifadesi; a ve b'nin eşit olup olmadığını kontrol eder.

Test case'leri notlar veya listede belirtilen özellikler ilerleyerek adım adım oluşturulur. Bu notlar, testlerin doğru bir şekilde geçtiğinden emin olmak için önemlidir. Ayrıca, test case'leri oluştururken sınıf içinde gerçekleştirilmeleri gerekiyorsa, bu durumda test sınıfı oluşturmak da yararlı olabilir.


ASSERT ve EXPECT Makroları

C++ projelerinde test case'ler yazarken, Google Test kütüphanesinde kullanılan ASSERT ve EXPECT makroları oldukça önemli bir yer tutar. ASSERT makrosu, beklentilerimizin doğru olup olmadığını kontrol eder ve doğru değilse testi fail eder. EXPECT makrosu ise aynı işlevi görür, ancak testi fail etmez.

Bu makroların kullanımı oldukça basit ve sembolik bir şekilde gerçekleştirilir. Bir ASSERT veya EXPECT ifadesinde, testin gerçekleşmesi beklenen kod bloğunu yazdıktan sonra, sonucunun hangi değere sahip olması gerektiğini belirtebilirsiniz. Örneğin if(x == 0) ASSERT_EQ(y, 5) şeklinde bir ifade, x'in 0 olduğunda y'nin 5'e eşit olması gerektiğini kontrol eder.

Bunun yanı sıra, Google Test kütüphanesi birçok farklı ASSERT ve EXPECT makrosu sunar. ASSERT_TRUE ve ASSERT_FALSE, sırasıyla ifadenin doğru ve yanlış olması gerektiğini kontrol eder. EXPECT_NEAR, belirli bir hata payına sahip float veya double ifadeleri için kullanılır. ASSERT_THROW, belirli türdeki bir exception'ın atılmasını bekler. Tüm bu makrolar, daha etkili ve hatasız test case'ler yazmanızı sağlar.

ASSERT Makroları BEKLEME
ASSERT_TRUE Değerin doğru olması bekleniyor
ASSERT_FALSE Değerin yanlış olması bekleniyor
ASSERT_EQ Eşitlik bekleniyor
ASSERT_NE Eşit olmamayı bekliyor
ASSERT_LT Küçük olması bekleniyor
ASSERT_LE Küçük veya eşit olması bekleniyor
ASSERT_GT Büyük olması bekleniyor
ASSERT_GE Büyük veya eşit olması bekleniyor
ASSERT_NEAR Belirli bir hata payına sahip float veya double bekleniyor
ASSERT_THROW Belirli türde bir exception atılması bekleniyor

Fonksiyon Testi Örneği

Bir fonksiyonun Google Test kütüphanesi ile test edilmesi oldukça kolaydır. İlk olarak, test edilecek fonksiyonun belirli bir girişe sahip olması gerekir, aksi takdirde testin doğru bir şekilde gerçekleştirilmesi mümkün değildir. Bu nedenle, örnek fonksiyonumuz, iki tamsayı parametresi alan ve toplamını döndüren bir fonksiyon olsun.

Aşağıdaki kod, oluşturduğumuz toplama fonksiyonunun testini yapar:

Girdi Beklenen Çıktı
2, 3 5
-4, 6 2
0, 0 0

Bu test, iki tamsayı parametresi alan testToplama fonksiyonunu çağırır ve sonucun beklenen değerle eşleşip eşleşmediğini ASSERT makrosu kullanarak kontrol eder. Her bir test durumu için farklı girdiler ve beklenen çıktılar belirlenir.

Bunun dışında, testleri beklenen değerler yerine EXPECT makrosu kullanarak yazabilirsiniz. EXPECT makrosu, testin başarısız olması halinde testin devam etmesini sağlar. Bu, fonksiyonun tamamının da test edilmesine izin verir ve daha az hata ve daha doğru testler sağlar.


Çalıştırma ve Sonuçlandırma

Google Test ile test case'leri yazıp derlemek yeterli değildir. Yazılan test case'lerin nasıl çalıştırılacağı ve sonuçların nasıl raporlanacağı hakkında bilgi sahibi olmak önemlidir. Bu kısım, Google Test'in en kritik kısımlarından biridir.

Google Test, test case'leri çalıştırmak ve raporlamak için birden fazla seçenek sunar. Bunlardan en yaygın olanı komut satırı arayüzüdür. Komut satırında test uygulamasının çalıştırılması için öncelikle test uygulamasının bulunduğu klasöre gidilmelidir. Daha sonra test uygulamasının adı ve --gtest_output parametresi ile raporun hangi formatta alınacağı belirtilmelidir.

Komut Açıklama
./testler --gtest_list_tests Tüm test case'leri listeler.
./testler --gtest_filter=test_adi\* Belirtilen test case'leri çalıştırır.
./testler --gtest_output=xml:test_raporu.xml Raporu XML formatında test_raporu.xml dosyasına kaydeder.

Google Test'in diğer bir özelliği, test case'lerin belirli kısımlarını kapsayan testlerin seçilmesine izin veren filter özelliğidir. Bu özellik, büyük projelerde testlerin doğru şekilde yönetilmesi için oldukça faydalıdır.

Google Test, test case'lerin sonuçlarını raporlamak için otomatik olarak bazı özetler oluşturur. Bu özetler, her test case'in adını, çalıştırma süresini, sonucunu ve hata mesajlarını içerir. Bu raporlar, test sonuçlarını manuel olarak okumaktan daha kolaydır.

Google Test aynı zamanda test sonuçlarını çizgi arayüzü gibi daha okunaklı bir şekilde de yayımlayabilir. Bu çizgi arayüzü, özet rapordan daha fazla bilgi sağlar ve başarısız testler için daha ayrıntılı bilgi sağlayabilir.


C++ Son Test Case Örnekleri

C++ projelerinde Google Test kullanarak test case oluşturmak oldukça kolaydır. Öncelikle, test case yazmak istediğiniz C++ projesi için Google Test kütüphanesinin kurulumunu gerçekleştirdiğinizi varsayalım. Projeyi build ederken Google Test kütüphanesinin include edilmesi gerekir.

C++ projelerinde farklı test case örnekleri için de Google Test kullanılabilir. Örneğin, bir String tipi test etmek istediğinizde, test case'in girilen stringin beklenen sonuçla eşleşip eşleşmediğini kontrol etmesi gerekir. Ayrıca, nesne yönelimli C++ kodlarında da test case yazılabilir. Bu durumda, nesne örnekleri yaratılır ve özelliklerinin doğru çalıştığına dair testler yapılır.

Test Adı Açıklama
String Testi String tipi için test case örnekleri gösterilir.
Class Testi Nesne yönelimli C++ kodları için test case örnekleri gösterilir.

Bir string testi örneği için, öncelikle girilen stringin doğru şekilde olup olmadığını kontrol eden bir test case yazılır. Bu örnekte, ASSERT_EQ() makrosu kullanılarak girilen stringin beklendiği gibi olup olmadığı kontrol edilir. Eğer beklendiği gibi değilse, test başarısız olur.

Bir nesne yönelimli C++ kodu testi örneği için, bir nesne örneği oluşturulur ve özellikleri test edilir. Örneğin, bir okul sistemini test etmek istediğimizi varsayalım. Bu durumda, öğrenci sınıfı nesne örneği yaratılır ve özelliklerinin doğru şekilde çalışıp çalışmadığı kontrol edilir. Bu testler için EXPECT_EQ() ve ASSERT_EQ() makroları kullanılabilir.


String Testi

Google Test, C++ projelerinde test case'leri oluşturmak için oldukça kullanışlı bir kütüphanedir. Bu kütüphane ile string testi de oldukça kolay ve verimli bir şekilde yapılabilmektedir. String testleri yaparken de ASSERT ve EXPECT makrolarını kullanabiliriz.

String testlerinde ilk olarak, test etmek istediğimiz fonksiyonu yazıyoruz. Ardından, bu fonksiyonun doğru sonuçlar verip vermediğini kontrol eden kodları yazıyoruz. Bu testlerde, olası hataların belirlenmesi ve düzeltilmesi oldukça önemlidir. Bu nedenle, tüm olası senaryolara göre test case'lerimizi yazmalıyız.

Örnek olarak, bir string fonksiyonunun boş bir string döndürmemesi gerektiğini varsayalım. Bu test case için, öncelikle bir string fonksiyon yazıyoruz ve sonucunun boş olmamasını kontrol eden kodları yazıyoruz. Bir örnek kod yapısı aşağıdaki gibidir:

```TEST(StringTest, EmptyStringTest) { String str = "deneme"; ASSERT_FALSE(str.empty());}```

Bu örnek kodda, StringTest isimli bir test case yazılmıştır. Bu test case, empty string kontrolünden sorumlu olacaktır. Bu fonksiyon boş bir string döndürmemesi gerektiğinden, ASSERT_FALSE ifadesi kullanılmıştır. Bu ifade, eğer sonuç false ise testin başarılı olduğunu gösterecektir.

Yukarıdaki örnekte olduğu gibi, tüm senaryolara göre test case'lerimizi yazarak, olası hataları tespit edip düzeltebiliriz. Bu da, C++ projelerimizin daha güvenli ve hata ayıklaması yapılabilir hale gelmesini sağlar.


Class Testi

C++'ta obje tabanlı programlama oldukça yaygın bir şekilde kullanılır. Bu nedenle, Google Test kütüphanesi ile obje tabanlı kodların test edilmesi oldukça önemlidir. Bir sınıfta, her sınıf yönteminin test edilmesi gerekir. Google Test ile sınıf tabanlı testler basit ve etkili bir şekilde gerçekleştirilebilir.

Bir sınıf testi oluşturmanın en iyi yolu, tüm testleri bir sınıf içinde gruplandırmak ve ihtiyaç duyulan testlere ait yöntemleri tanımlamaktır. Bu yöntemlerin her biri, test edilen özelliklerin doğru bir şekilde çalıştığından emin olmak için test case'ler tarafından kullanılır.

Örneğin, bir sınıfın "okul" adında bir void yöntemi olduğunu varsayalım. Bu yöntem, bir öğrencinin kaydını alır ve veritabanını günceller. Test case'leri, okul yönteminin gerçekten öğrenci kayıtlarını aldığını ve güncellediğini doğrulamak için oluşturulabilir.

Sınıf Adı Test Edilen Yöntem Beklenen Sonuç
Okul void Okul::ogrenciKaydiAl(Ogrenci o) Veritabanı öğrenci kaydı güncellenir

Bu basit bir örnek olsa da, sınıf testlerinin önemi oldukça büyüktür. Google Test kütüphanesi, fonksiyon testlerinde olduğu gibi, ASSERT ve EXPECT makroları yardımıyla sınıf testlerinde de kullanılabilmektedir.

  • ASSERT: bir test başarısız olduğunda hataları gösterir ve testi sonlandırır.
  • EXPECT: bir test başarısız olsa bile, hataları kaydeder ve testin devam etmesine izin verir.

Sınıf testleri, nesne yönelimli programlamaya özgüdür ve bu nedenle yalnızca bu tür programlama dillerinde kullanılabilir. Google Test kütüphanesi, C++ gibi obje tabanlı bir programlama dilinde, özellikle de fonksiyonlarla değil sınıflarla uğraştığımız zamanlarda oldukça yararlıdır.