#include <gtest/gtest.h>
#include "Calculate.hpp"
/* Mesela bu Calculate.hpp'de yer alan Add diye bir fonksiyonumuz var.
MathTest dedigimiz kisim, Test icin bir nevi namespace, ana grup
Addition dedigimiz kisim, alt grup ve testin kendisi. Testleri
calistirdigimizda asagi yukari soyle bir cikti veriyor;
[==========] Running 1 tests from 1 test case.
[‑‑‑‑‑‑‑‑‑‑] Global test environment set‑up.
[‑‑‑‑‑‑‑‑‑‑] 1 tests from MathTest
[ RUN ] MathTest.Addition
*/
TEST(MathTest, Addition) {
EXPECT_EQ(Add(2, 3), 5); // Beklenen: 5
EXPECT_EQ(Add(-1, 1), 0); // Beklenen: 0
EXPECT_EQ(Add(0, 0), 0); // Beklenen: 0
}
Ya şimdi birim test olayını çok irdelemeden dünya kadar kod yazdım. Hepsini o an için doğru çalışması adına çok test ettim ama birim test gibi parçalara ayırıp değil de acaba yanlış nerede şeklinde hiç fonskiyonların bağımlılıklarını birbirinden ayırmadan yaptım.Unit testleri ve programin kodlari bir birlerinden bagimsiz, nasil kafa karisikligina yol acsin? Baska bir kavramla karistiriyorsun sanirim.
Fonksiyonlari, yapilari vs test fonksiyonuna veriyorsun, test case ve beklenen sonuclari hazirliyorsun, sonra test ettiriyorsun. Eger calisma sirasinda herhangi bir exception, crush veya undefined behaviour yasanirsa, yada test sonuclari tutarsizsa ve beklenen yanitlari, yada beklenen calisma suresini saglamiyorsa biliyorsun ki kodunda bug var ve duzeltmen gerek.
Mesela C++'ta gtest ile;
C++:#include <gtest/gtest.h> #include "Calculate.hpp" /* Mesela bu Calculate.hpp'de yer alan Add diye bir fonksiyonumuz var. MathTest dedigimiz kisim, Test icin bir nevi namespace, ana grup Addition dedigimiz kisim, alt grup ve testin kendisi. Testleri calistirdigimizda asagi yukari soyle bir cikti veriyor; [==========] Running 1 tests from 1 test case. [‑‑‑‑‑‑‑‑‑‑] Global test environment set‑up. [‑‑‑‑‑‑‑‑‑‑] 1 tests from MathTest [ RUN ] MathTest.Addition */ TEST(MathTest, Addition) { EXPECT_EQ(Add(2, 3), 5); // Beklenen: 5 EXPECT_EQ(Add(-1, 1), 0); // Beklenen: 0 EXPECT_EQ(Add(0, 0), 0); // Beklenen: 0 }
Farkli bir dosyadayiz, yazdigimiz kodu buraya include ettik ve test ettik. Mantigi bu. O yuzden kafa karistiracak bir sey yok. Eger Add fonksiyonu dogru cikti vermezse hata verecek. Tabii ki tum testler sadece dogru sonuc vermeye yonelik degil. Random crush testleri, time limited testler gibi bir kac test cesidi de var. Ama basit bir ornek.
Testler kodun kendisinden farkli bir yerde durur yada cesitli makrolar vardir bir fonksiyonu test icin isaretleyen vs vs. Ama kodla beraber karisik bir bicimde yer almaz. Dedigim gibi, muhtemelen baska bir kavramla karistiriyorsun.
Basliga gelecek olursam, fazlasiyla onemli.
Unit test yapmayi ogreneyim, hemen yapacagim. Unity3D ile yapacagim.Bazi fonksiyonlarin baska fonksiyonlara bagimli olmasi onlari teste sokmak icin bir engel degil yada sureci karisiklastiracak bir sey degil. En kucuk fonksiyonlarindan basla unit testlerini yazmaya. Tek bir isi yapan fonksiyonlardan bahsediyorum. Oraya gelecek datayi da test case olarak koy.
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.