{"id":3068,"date":"2025-07-27T09:12:19","date_gmt":"2025-07-27T09:12:19","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=3068"},"modified":"2025-07-27T09:12:19","modified_gmt":"2025-07-27T09:12:19","slug":"arac-sdl3-birim-testler-ii","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/","title":{"rendered":"[ARA\u00c7] SDL3 Birim Testler &#8211; II"},"content":{"rendered":"<p>Evet sevgili dostlar k\u0131sa bir yaz\u0131 ile maceraya devam.<span style=\"color: #008000;\"> <strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/13\/arac-sdl3-birim-testler\/\">Son yaz\u0131m\u0131zda<\/a><\/strong><\/span>, SDL3 \u00f6rne\u011fimize birim testleri ve birim test kapsama analizimizi eklemi\u015ftik. Bu noktada Cmake ile Ctest konusuna de\u011finmemi\u015ftik, bu yaz\u0131mda Cteste de\u011finece\u011fiz.<\/p>\n<p>Ctest, temelde cmake taraf\u0131ndan, farkl\u0131 birim test k\u00fct\u00fcphaneleri kullanarak C++ uygulamalar\u0131n\u0131z i\u00e7in geli\u015ftirmi\u015f oldu\u011funuz birim test uygulamalar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Cteste y\u00f6nelik, \u00f6ne \u00e7\u0131kan hususlar\u0131 a\u015fa\u011f\u0131daki gibi s\u0131ralayabiliriz:<\/p>\n<ul>\n<li>Birim test frameworklerine ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131n olmamas\u0131d\u0131r. Google test, Catch2 ya da Boost.Test ile kullan\u0131labilir,<\/li>\n<li>Test uygulamalar\u0131n\u0131 sistematik bir \u015fekilde \u00e7al\u0131\u015ft\u0131rma ve istedi\u011finiz formatta \u00e7\u0131kt\u0131lar\u0131 elde edebilmesi, test raporlama,<\/li>\n<li>Testleri etiketleyerek grupland\u0131rma,<\/li>\n<li>Ba\u015far\u0131z olan testlerin tekrar \u00e7al\u0131\u015ft\u0131r\u0131labilmesi ya da testlere y\u00f6nelik zaman a\u015f\u0131m\u0131 kontrol\u00fc,<\/li>\n<li>Testlerin paralel bir \u015fekilde ko\u015fturulmas\u0131,<\/li>\n<li>CI\/CD entegrasyonunu kolayla\u015ft\u0131rma (buna \u00f6n\u00fcm\u00fczdeki yaz\u0131mda ayr\u0131ca de\u011finece\u011fim),<\/li>\n<li>Bu test ko\u015fumlar\u0131n\u0131n, platform ba\u011f\u0131ms\u0131z bir \u015fekilde yap\u0131labilmesidir.<\/li>\n<\/ul>\n<p>Evet \u015fimdi de, Ctest&#8217;i uygulamalar\u0131n\u0131za cmake betikleri arac\u0131l\u0131\u011f\u0131 ile nas\u0131l ekleyebilece\u011fimize g\u00f6z atal\u0131m. Asl\u0131na bakarsan\u0131z bir\u00e7ok bile\u015feni, bir \u00f6nceki yaz\u0131m ile zaten ekledik ama konu b\u00fct\u00fcnl\u00fc\u011f\u00fc amac\u0131 ile burada onlara de\u011finece\u011fim:<\/p>\n<ul>\n<li>\u00d6ncelikli olarak Cteste y\u00f6nelik kabiliyetleri aktifle\u015ftirmek i\u00e7in;\n<ul>\n<li><i>enable_testing() <\/i>cmake beti\u011fi i\u00e7erisinde \u00e7a\u011fr\u0131lmal\u0131d\u0131r,<\/li>\n<\/ul>\n<\/li>\n<li>Google test kulland\u0131\u011f\u0131m\u0131z i\u00e7in buna y\u00f6nelik eklentileri yapmal\u0131y\u0131z ki bir \u00f6nceki yaz\u0131mda buna de\u011findim. Burada ilaveten bahsetmemiz gereken konu, ilgili test target&#8217;\u0131n\u0131 kullanarak testleri ke\u015ffettirme, bunun i\u00e7in de a\u015fa\u011f\u0131daki sat\u0131rlar\u0131 ekliyoruz. Bu sat\u0131rlar ile birlikte, ctest ilgili testleri otomatik tespit eder. Ctest en h\u0131zl\u0131 kullan\u0131ma alma y\u00f6ntemi asl\u0131nda budur.\n<ul>\n<li>include(GoogleTest)<\/li>\n<li>gtest_discover_tests(${TEST_TARGET_NAME})<\/li>\n<li>Yukar\u0131daki iki sat\u0131r ile art\u0131k birim testlerinizi (google test ile yaz\u0131lm\u0131\u015f) cteste sunabileceksiniz.<\/li>\n<\/ul>\n<\/li>\n<li>Bir \u00f6nceki ad\u0131mdaki y\u00f6ntemin yan\u0131nda, el ile testleri tan\u0131mlatabiliyoruz. Bunun i\u00e7in \u00f6ncelikle a\u015fa\u011f\u0131daki sat\u0131rlar\u0131 her bir test grubu i\u00e7in eklemliyiz:\n<ul>\n<li>add_test(TEST_NAME MyTest COMMAND ${TEST_TARGET_NAME} &#8211;gtest_filter=&#8221;test filtresi)<\/li>\n<li>Art\u0131k ctest, sadece yukar\u0131daki komut ile ekledi\u011finiz testleri g\u00f6rebilecek,<\/li>\n<li>Bunun yan\u0131nda yukar\u0131daki komutlar ile ekledi\u011finiz testlere y\u00f6nelik etiket de ekleyebiliyorsunuz ki bu google&#8217;\u0131n kendi filtreleri yan\u0131nda Ctest ile de filtreleme yapabileceksiniz. Bunun i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/li>\n<li>\n<p style=\"margin: 0in; font-family: 'FiraCode Nerd Font Mono'; font-size: 10.5pt;\">set_tests_properties(TEST_NAME PROPERTIES LABELS &#8220;sdl_resource;creation&#8221;)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>Ayr\u0131ca, her cpp dosyas\u0131 i\u00e7in, teste y\u00f6nelik komutlar\u0131 kolay ve otomatik bir \u015fekilde eklemeye y\u00f6nelik a\u015fa\u011f\u0131daki gibi bir fonksiyon da i\u015finizi g\u00f6recektir. Bu fonksiyon, her bir test i\u00e7in ayr\u0131 bir \u00e7al\u0131\u015ft\u0131r\u0131labilir dosya olu\u015fturur ve test ekler. Detaylar i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/cfd.university\/learn\/automating-cfd-solver-and-library-compilation-using-cmake\/how-to-automate-testing-with-cmake-ctest-and-gtest\/\">https:\/\/cfd.university\/learn\/automating-cfd-solver-and-library-compilation-using-cmake\/how-to-automate-testing-with-cmake-ctest-and-gtest\/<\/a><\/strong><\/span> sayfas\u0131na g\u00f6z atabilirsiniz.<\/li>\n<\/ul>\n<p>Bu ad\u0131mlar ile temel ctest ayarlamalar\u0131n\u0131 tamamlam\u0131\u015f oluyoruz. Test uygulamas\u0131n\u0131 olu\u015fturup, sonras\u0131nda testleri ko\u015fturmak i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 (tepe cmake beti\u011finin bulundu\u011fu dizinden itibaren) \u00e7a\u011f\u0131rman\u0131z yeterli:<\/p>\n<pre class=\"lang:sh decode:true \">cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug\r\ncmake --build build\r\ncd build\/test\r\nctest --output-on-failure<\/pre>\n<p>Yukar\u0131daki komutlar\u0131 uygulamam\u0131zda \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki gibi bir \u00e7\u0131kt\u0131 g\u00f6rmeniz gerekiyor:<\/p>\n<pre class=\"lang:sh decode:true \">\u276f ctest --output-on-failure\r\nTest project \/home\/yazilimperver\/repo\/cpp-playground\/build\/test\r\nStart 1: SDLResourceTest.ConstructorShouldStoreGivenResource\r\n1\/8 Test #1: SDLResourceTest.ConstructorShouldStoreGivenResource ................................\u00a0\u00a0 Passed\u00a0\u00a0\u00a0 0.01 sec\r\nStart 2: SDLResourceTest.DestructorShouldCallDeleterWhenResourceIsValid\r\n2\/8 Test #2: SDLResourceTest.DestructorShouldCallDeleterWhenResourceIsValid .....................\u00a0\u00a0 Passed\u00a0\u00a0\u00a0 0.00 sec\r\nStart 3: SDLResourceTest.DestructorShouldNotCallDeleterWhenResourceIsNull\r\n3\/8 Test #3: SDLResourceTest.DestructorShouldNotCallDeleterWhenResourceIsNull ...................\u00a0\u00a0 Passed\u00a0\u00a0\u00a0 0.00 sec\r\nStart 4: SDLResourceTest.MoveConstructorShouldTransferOwnership\r\n4\/8 Test #4: SDLResourceTest.MoveConstructorShouldTransferOwnership .............................\u00a0\u00a0 Passed\u00a0\u00a0\u00a0 0.00 sec\r\nStart 5: SDLResourceTest.MoveAssignmentShouldTransferOwnershipAndCallDeleterOnOldResource\r\n5\/8 Test #5: SDLResourceTest.MoveAssignmentShouldTransferOwnershipAndCallDeleterOnOldResource ...\u00a0\u00a0 Passed\u00a0\u00a0\u00a0 0.00 sec\r\nStart 6: SDLResourceTest.MoveAssignmentShouldHandleSelfAssignmentGracefully\r\n6\/8 Test #6: SDLResourceTest.MoveAssignmentShouldHandleSelfAssignmentGracefully .................\u00a0\u00a0 Passed\u00a0\u00a0\u00a0 0.00 sec\r\nStart 7: SDLResourceTest.ReleaseShouldReturnAndClearInternalPointer\r\n7\/8 Test #7: SDLResourceTest.ReleaseShouldReturnAndClearInternalPointer .........................\u00a0\u00a0 Passed\u00a0\u00a0\u00a0 0.00 sec\r\nStart 8: SDLResourceTest.BoolConversionShouldReflectValidity\r\n8\/8 Test #8: SDLResourceTest.BoolConversionShouldReflectValidity ................................\u00a0\u00a0 Passed\u00a0\u00a0\u00a0 0.00 sec\r\n100% tests passed, 0 tests failed out of 8\r\n\r\nTotal Test time (real) =\u00a0\u00a0 0.05 sec<\/pre>\n<p>Yukar\u0131daki komutlar\u0131n yan\u0131nda, sizlere fayda sa\u011flayacak\u00a0 ve ctest&#8217;in di\u011fer kabiliyetlerini kullanman\u0131za olanak sa\u011flayacak di\u011fer ctest komutlar\u0131n\u0131 da a\u015fa\u011f\u0131ya ekliyorum:<\/p>\n<ul>\n<li>ctest -V\n<ul>\n<li>Testlere y\u00f6nelik ayr\u0131nt\u0131l\u0131 \u00e7\u0131kt\u0131lar\u0131 elde etmenizi sa\u011flar,<\/li>\n<\/ul>\n<\/li>\n<li>ctest -L TestGrubu\n<ul>\n<li>&#8220;TestGrubu&#8221; olarak etiketlenmi\u015f test grubunu \u00e7al\u0131\u015ft\u0131r\u0131r. Bunu nas\u0131l tan\u0131mlayabilece\u011finize yukar\u0131da de\u011findim,<\/li>\n<\/ul>\n<\/li>\n<li>ctest &#8211;rerun-failed\n<ul>\n<li>Sadece ba\u015far\u0131s\u0131z olan testleri yeniden \u00e7al\u0131\u015ft\u0131r. Bu kabiliyet \u00f6zellikle CI\/CD a\u015famas\u0131nda ve <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.google.com\/search?q=flaky+test&amp;oq=flaky+test&amp;gs_lcrp=EgZjaHJvbWUyCQgAEEUYORiABDIGCAEQRRhAMgYIAhAjGCcyBwgDEAAYgAQyBwgEEAAYgAQyBwgFEAAYgAQyBwgGEAAYgAQyBwgHEAAYgATSAQgxNjE5ajBqMagCALACAA&amp;sourceid=chrome&amp;ie=UTF-8\">flaky testler<\/a><\/strong><\/span> i\u00e7in faydal\u0131 bir kabiliyet,<\/li>\n<\/ul>\n<\/li>\n<li>ctest -j4\n<ul>\n<li>4 paralel test \u00e7al\u0131\u015ft\u0131r. Yukar\u0131da ctest i\u00e7in tan\u0131mlad\u0131\u011f\u0131n\u0131z testleri <strong>ayr\u0131\u00a0<\/strong>processlerde paralel olarak \u00e7al\u0131\u015ft\u0131rman\u0131za olanak sa\u011flar,<\/li>\n<li>\u00d6zellikle adet olarak fazla olan testleriniz i\u00e7in harika bir kabilyet,<\/li>\n<\/ul>\n<\/li>\n<li>ctest -R &lt;regex&gt;\n<ul>\n<li>regex ile uyumlu testleri \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Yaz\u0131m\u0131 sonland\u0131rmadan \u00f6nce etiketlemeye dair, uygulamam\u0131z \u00fczerinden bir \u00f6rnek vermek istiyorum. Bir di\u011fer ifade ile asl\u0131nda otomatik olarak ctest&#8217;in testleri ke\u015ffetmesi yerine bunlar\u0131 biz verece\u011fiz. Bunlara y\u00f6nelik \u00f6ncelikle testleri ekliyoruz. Bunlar asl\u0131nda tek bir test olarak de\u011filde, test grubu olarak da d\u00fc\u015f\u00fcnebilirsiniz (b\u00fct\u00fcn testleri eklemedi\u011fimin fark\u0131nday\u0131m, \u00e7ok uzatmamak ad\u0131na bu \u015fekilde yapt\u0131m):<\/p>\n<pre class=\"lang:c++ decode:true \">add_test(NAME SDLResourceTest.ConstructorShouldStoreGivenResource COMMAND ${TEST_TARGET_NAME} --gtest_filter=SDLResourceTest.ConstructorShouldStoreGivenResource)\r\nadd_test(NAME SDLResourceTest.DestructorShouldCallDeleterWhenResourceIsValid COMMAND ${TEST_TARGET_NAME} --gtest_filter=SDLResourceTest.DestructorShouldCallDeleterWhenResourceIsValid)\r\nadd_test(NAME SDLResourceTest.MoveAssignmentShouldTransferOwnershipAndCallDeleterOnOldResource COMMAND ${TEST_TARGET_NAME} --gtest_filter=SDLResourceTest.MoveAssignmentShouldTransferOwnershipAndCallDeleterOnOldResource)<\/pre>\n<p>Daha sonra, yukar\u0131da belirledi\u011fimiz testlere y\u00f6nelik etiketleri, a\u015fa\u011f\u0131da g\u00f6sterilen \u015fekilde tan\u0131ml\u0131yoruz:<\/p>\n<pre class=\"lang:c++ decode:true \"># Etiketleme\r\nset_tests_properties(SDLResourceTest.ConstructorShouldStoreGivenResource PROPERTIES LABELS \"sdl_resource;creation\")\r\nset_tests_properties(SDLResourceTest.DestructorShouldCallDeleterWhenResourceIsValid PROPERTIES LABELS \"sdl_resource;destruction\")\r\nset_tests_properties(SDLResourceTest.MoveAssignmentShouldTransferOwnershipAndCallDeleterOnOldResource PROPERTIES LABELS \"sdl_resource;move\")<\/pre>\n<p>g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, her test i\u00e7in asl\u0131nda birden fazla etiket verebiliyoruz. Son olarak da, ilgili etikete sahip testleri ko\u015fturmak i\u00e7in de ilgili etiketleri, ctest komutuna veriyoruz. Bunlar\u0131 verirken &#8220;|&#8221; ile testleri &#8220;or&#8221; layabiliyoruz.<\/p>\n<pre class=\"lang:sh decode:true \">ctest -L \"creation|move\"<\/pre>\n<p>Bu yaz\u0131mla birlikte birim testlere y\u00f6nelik konulara \u015fimdilik bir nokta koyuyoruz. Bir sonraki yaz\u0131mda, GitHub actions ile CI\/CD kabiliyetini yaz\u0131l\u0131m\u0131m\u0131za kazand\u0131r\u0131yor olaca\u011f\u0131z. Belki bir iki ufak, bonus konuya da de\u011finiriz. Bu s\u0131cak yaz vakitlerin, serin ve bol kodlu g\u00fcnler diliyorum \ud83d\ude42<\/p>\n<h2 id=\"BMWTcfT\"><strong><span style=\"color: #0000ff;\">Kaynaklar<\/span><\/strong><\/h2>\n<ul>\n<li><a href=\"https:\/\/coderefinery.github.io\/cmake-workshop\/testing\/\"><span style=\"color: #008000;\"><strong>https:\/\/coderefinery.github.io\/cmake-workshop\/testing\/<\/strong><\/span><\/a><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/cfd.university\/learn\/automating-cfd-solver-and-library-compilation-using-cmake\/how-to-automate-testing-with-cmake-ctest-and-gtest\/\">https:\/\/cfd.university\/learn\/automating-cfd-solver-and-library-compilation-using-cmake\/how-to-automate-testing-with-cmake-ctest-and-gtest\/<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/cmake.org\/cmake\/help\/book\/mastering-cmake\/chapter\/Testing%20With%20CMake%20and%20CTest.html\">https:\/\/cmake.org\/cmake\/help\/book\/mastering-cmake\/chapter\/Testing%20With%20CMake%20and%20CTest.html<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/cmake.org\/cmake\/help\/latest\/manual\/ctest.1.html\">https:\/\/cmake.org\/cmake\/help\/latest\/manual\/ctest.1.html<\/a><\/strong><\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Evet sevgili dostlar k\u0131sa bir yaz\u0131 ile maceraya devam. Son yaz\u0131m\u0131zda, SDL3 \u00f6rne\u011fimize birim testleri ve birim test kapsama analizimizi eklemi\u015ftik. Bu noktada Cmake ile Ctest konusuna de\u011finmemi\u015ftik, bu yaz\u0131mda Cteste de\u011finece\u011fiz. Ctest, temelde cmake taraf\u0131ndan, farkl\u0131 birim test k\u00fct\u00fcphaneleri kullanarak C++ uygulamalar\u0131n\u0131z i\u00e7in geli\u015ftirmi\u015f oldu\u011funuz birim test uygulamalar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Cteste y\u00f6nelik, \u00f6ne&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41,188],"tags":[155,1186,1190,501,1188,1187,1189],"class_list":["post-3068","post","type-post","status-publish","format-standard","hentry","category-c","category-modern-c","category-yazilim-muhendisligi","tag-cmake","tag-ctest","tag-flaky","tag-google-test","tag-labeling","tag-paralel-test","tag-regular-expressions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[ARA\u00c7] SDL3 Birim Testler - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[ARA\u00c7] SDL3 Birim Testler - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet sevgili dostlar k\u0131sa bir yaz\u0131 ile maceraya devam. Son yaz\u0131m\u0131zda, SDL3 \u00f6rne\u011fimize birim testleri ve birim test kapsama analizimizi eklemi\u015ftik. Bu noktada Cmake ile Ctest konusuna de\u011finmemi\u015ftik, bu yaz\u0131mda Cteste de\u011finece\u011fiz. Ctest, temelde cmake taraf\u0131ndan, farkl\u0131 birim test k\u00fct\u00fcphaneleri kullanarak C++ uygulamalar\u0131n\u0131z i\u00e7in geli\u015ftirmi\u015f oldu\u011funuz birim test uygulamalar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Cteste y\u00f6nelik, \u00f6ne... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-27T09:12:19+00:00\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"[ARA\u00c7] SDL3 Birim Testler &#8211; II\",\"datePublished\":\"2025-07-27T09:12:19+00:00\",\"dateModified\":\"2025-07-27T09:12:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/\"},\"wordCount\":941,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"CMAKE\",\"ctest\",\"flaky\",\"Google Test\",\"labeling\",\"paralel test\",\"regular expressions\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/\",\"name\":\"[ARA\u00c7] SDL3 Birim Testler - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2025-07-27T09:12:19+00:00\",\"dateModified\":\"2025-07-27T09:12:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[ARA\u00c7] SDL3 Birim Testler &#8211; II\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[ARA\u00c7] SDL3 Birim Testler - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/","og_locale":"tr_TR","og_type":"article","og_title":"[ARA\u00c7] SDL3 Birim Testler - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet sevgili dostlar k\u0131sa bir yaz\u0131 ile maceraya devam. Son yaz\u0131m\u0131zda, SDL3 \u00f6rne\u011fimize birim testleri ve birim test kapsama analizimizi eklemi\u015ftik. Bu noktada Cmake ile Ctest konusuna de\u011finmemi\u015ftik, bu yaz\u0131mda Cteste de\u011finece\u011fiz. Ctest, temelde cmake taraf\u0131ndan, farkl\u0131 birim test k\u00fct\u00fcphaneleri kullanarak C++ uygulamalar\u0131n\u0131z i\u00e7in geli\u015ftirmi\u015f oldu\u011funuz birim test uygulamalar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Cteste y\u00f6nelik, \u00f6ne... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2025-07-27T09:12:19+00:00","author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"4 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"[ARA\u00c7] SDL3 Birim Testler &#8211; II","datePublished":"2025-07-27T09:12:19+00:00","dateModified":"2025-07-27T09:12:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/"},"wordCount":941,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["CMAKE","ctest","flaky","Google Test","labeling","paralel test","regular expressions"],"articleSection":["C++","Modern C++","Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/","name":"[ARA\u00c7] SDL3 Birim Testler - II - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2025-07-27T09:12:19+00:00","dateModified":"2025-07-27T09:12:19+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2025\/07\/27\/arac-sdl3-birim-testler-ii\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"[ARA\u00c7] SDL3 Birim Testler &#8211; II"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/3068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=3068"}],"version-history":[{"count":4,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/3068\/revisions"}],"predecessor-version":[{"id":3077,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/3068\/revisions\/3077"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=3068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=3068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=3068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}