{"id":2512,"date":"2022-04-15T20:49:59","date_gmt":"2022-04-15T20:49:59","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2512"},"modified":"2022-04-15T20:59:48","modified_gmt":"2022-04-15T20:59:48","slug":"haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/","title":{"rendered":"Haftal\u0131k C++ 48 &#8211; &#8220;Function Tracker&#8221;: Basit bir &#8220;Mock&#8221; k\u00fct\u00fcphanesi"},"content":{"rendered":"<p>Merhaba arkada\u015flar, bir ba\u015fka haftal\u0131k C++ yaz\u0131s\u0131 ile birlikteyiz. Bu yaz\u0131mda asl\u0131nda bir ihtiya\u00e7 sonucu geli\u015ftirdi\u011fim, kulland\u0131ktan sonra da sizler ile payla\u015fmak istedi\u011fim bir k\u00fct\u00fcphaneden bahsedece\u011fim. Tabi k\u00fct\u00fcphane dedi\u011fime bakmay\u0131n, asl\u0131nda tek ba\u015fl\u0131k dosyas\u0131ndan olu\u015fan bir k\u00fct\u00fcphane. \u015eu an olduk\u00e7a basit ve kabiliyet anlam\u0131nda sade ama birazdan bahsedece\u011fim ihtiya\u00e7lar\u0131n bir \u00e7o\u011funu kar\u015f\u0131lad\u0131 ve sizlere de faydal\u0131 olaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorum. Bu arada birim test ile ilgili daha \u00f6nce yazd\u0131\u011f\u0131m yaz\u0131lara da bir g\u00f6z atmak isterseniz, a\u015fa\u011f\u0131daki ba\u011flant\u0131lara bakabilirsiniz:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/30\/birim-test-tavsiyeleri\/\">Birim Test Tavsiyeleri<\/a><\/strong><\/span><\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/25\/uygulama-izleme-yazilimi-serisi-3-birim-test\/\">Uygulama \u0130zleme Yaz\u0131l\u0131m\u0131 3 &#8211; Utility, Birim Testler, S\u00fcrekli Entegrasyon<\/a><\/strong><\/span><\/p>\n<p>Ayr\u0131ca bu k\u00fct\u00fcphane ile birlikte daha \u00f6nce sizler ile payla\u015ft\u0131\u011f\u0131m;<\/p>\n<ul>\n<li>Modern C++ kabiliyetlerinin,<\/li>\n<li>CMake&#8217;in,<\/li>\n<li>Google Test&#8217;in,<\/li>\n<li>Ve nihayetinde birim testler ile kullan\u0131labilecek \u00f6rnek bir mock mekanizmas\u0131n\u0131n kullan\u0131m\u0131na ili\u015fkin de bir uygulama g\u00f6rm\u00fc\u015f olaca\u011f\u0131z.<\/li>\n<\/ul>\n<p>Projeye a\u015fa\u011f\u0131daki repodan ula\u015fabilirsiniz. Her t\u00fcrl\u00fc g\u00f6r\u00fc\u015f ve \u00f6neriye a\u00e7\u0131kt\u0131r.<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\/FunctionTracker\">https:\/\/github.com\/yazilimperver\/FunctionTracker<\/a><\/strong><\/span><\/p>\n<p>\u015eimdi gelelim neden b\u00f6yle bir k\u00fct\u00fcphaneye ihtiya\u00e7 oldu\u011funa.<\/p>\n<p>Birim test yazarken, test etti\u011finiz s\u0131n\u0131f\u0131n bar\u0131nd\u0131rd\u0131\u011f\u0131 kabiliyetler yan\u0131nda, kulland\u0131\u011f\u0131 servisler ya da di\u011fer s\u0131n\u0131flara ili\u015fkin ihtiya\u00e7 duydu\u011fu API&#8217;leri de \u00e7a\u011f\u0131r\u0131p\/\u00e7a\u011f\u0131rmad\u0131\u011f\u0131 ya da do\u011fru parametrelerin ge\u00e7irilip\/ge\u00e7irilmedi\u011fini kontrol etme ihtiyac\u0131n\u0131 hissetmi\u015fsinizdir. K\u0131saca, test edilen s\u0131n\u0131f\u0131n di\u011fer s\u0131n\u0131flar ile olan etkile\u015fimini test etme ihtiyac\u0131 olabilmektedir.<\/p>\n<p>Temelde, bu tarz i\u015fler i\u00e7in &#8220;mock&#8221; nesneleri kullan\u0131lmakta (&#8220;mock&#8221; ile &#8220;fake&#8221; nesneler aras\u0131ndaki fark i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/google.github.io\/googletest\/gmock_for_dummies.html\">googlemock<\/a><\/strong><\/span> sayfas\u0131na g\u00f6z atabilirsiniz). Bu nesneler kendi i\u00e7erilerinde detayl\u0131 kabiliyetler sunmasalar da, \u00e7al\u0131\u015fma zaman\u0131nda h\u0131zl\u0131 bir \u015fekilde, bu nesnelerin kullan\u0131m\u0131na ili\u015fkin bilgi vermektedir. Elbette bunun i\u00e7in, halihaz\u0131rda bir \u00e7ok k\u00fct\u00fcphane de mevcut. \u00d6rne\u011fin, googlemock k\u00fct\u00fcphanesi. <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/google.github.io\/googletest\/gmock_for_dummies.html\">Kendi sayfas\u0131nda<\/a><\/strong><\/span> ifade etti\u011fi \u00fczere olduk\u00e7a yetenekli bir k\u00fct\u00fcphane ve farkl\u0131 \u00e7a\u011fr\u0131lar i\u00e7in farkl\u0131 d\u00f6n\u00fc\u015f de\u011feri sunma gibi bir \u00e7ok kabiliyeti sunabilmekte. Fakat kullan\u0131m\u0131 a\u00e7\u0131k\u00e7as\u0131 biraz \u00e7etrefelli (en az\u0131ndan bana \u00f6yle geldi \ud83d\ude00 ), bir s\u00fcre kulland\u0131ktan sonra al\u0131\u015fsan\u0131z da, acaba daha basit bir k\u00fct\u00fcphane olabilir miydi insan d\u00fc\u015f\u00fcnmeden edemiyor. \u0130\u015fte bu noktada &#8220;FunctionTracker&#8221; k\u00fct\u00fcphanemiz ortaya \u00e7\u0131k\u0131yor.<\/p>\n<p>Peki mevcut &#8220;FunctionTracker&#8221; k\u00fct\u00fcphanemiz bizlere neler sunuyor. Hemen bakal\u0131m:<\/p>\n<ul>\n<li>Fonksiyonun \u00e7a\u011fr\u0131l\u0131p\/\u00e7a\u011fr\u0131lmad\u0131\u011f\u0131 kontrol\u00fc,<\/li>\n<li>Fonksiyon \u00e7a\u011fr\u0131lma adet kontrol\u00fc,<\/li>\n<li>Ge\u00e7irilen temel ve POD veri tipindeki parametrelere eri\u015fim ya da direk ge\u00e7irilmi\u015f mi kontrol\u00fc,<\/li>\n<li>\u00c7oklu fonksiyon \u00e7a\u011fr\u0131s\u0131 ve \u00e7oklu parametre ge\u00e7i\u015f kontrolleri,<\/li>\n<li>\u00c7a\u011fr\u0131lma ge\u00e7mi\u015fi s\u0131f\u0131rlama.<\/li>\n<\/ul>\n<p>Peki bu k\u00fct\u00fcphaneyi nas\u0131l kullanabilirsiniz ona bakal\u0131m. Temelde yapman\u0131z gereken ilk \u015fey, &#8220;mock&#8221; olarak kullanaca\u011f\u0131n\u0131z s\u0131n\u0131f\u0131, aray\u00fcz s\u0131n\u0131f\u0131ndan ve &#8220;FunctionTracker&#8221; s\u0131n\u0131f\u0131ndan t\u00fcretmek olacak. Sonra da, aray\u00fcz s\u0131n\u0131f\u0131n\u0131 ger\u00e7ekleyen her bir API i\u00e7erisinden &#8220;AddCall&#8221; API&#8217;sini \u00e7a\u011f\u0131rmak olacak. Bunun d\u0131\u015f\u0131nda, mock nesnesi i\u00e7in yapacak bir \u015fey kalm\u0131yor. Hemen bir \u00f6rne\u011fe bakal\u0131m.<\/p>\n<pre class=\"lang:c++ decode:true \">class DummyServerStub\r\n: public DummyService, public FunctionTracker {\r\npublic:\r\n     virtual void ServiceAPI1(bool basicInput1, const Obj&amp; structInput,\u00a0int32_t basicInput2, TestEnum enumInput) {\r\n          \/\/ Bu cagri ile ilgili fonksiyon kayit altina alinir\r\n          AddCall(\"ServiceAPI1\", basicInput1, structInput, basicInput2, enumInput);\r\n     }\r\n\r\n      virtual void ServiceAPI2(const std::string&amp; strValue) {\r\n          AddCall(\"ServiceAPI2\", strValue);\r\n      }\r\n};<\/pre>\n<p>Burada DummService aray\u00fcz\u00fcne ili\u015fkin bir &#8220;mock&#8221; s\u0131n\u0131f\u0131 g\u00f6rebilirsiniz ve her bir public API i\u00e7in ne yapman\u0131z gerekti\u011fini de. Ayr\u0131ca Reset() API&#8217;si ile de \u00e7a\u011fr\u0131lma ve ge\u00e7irilen parametre ge\u00e7mi\u015fini s\u0131f\u0131rlayabilirsiniz.<\/p>\n<p>&#8220;Mock&#8221; s\u0131n\u0131f\u0131n\u0131 daha sonra testlerde kullanmak i\u00e7in ise a\u015fa\u011f\u0131daki gibi bir yol izleyebilirsiniz:<\/p>\n<pre class=\"lang:c++ decode:true \">mInstanceCUT-&gt;PublicAPI1(true, Obj{ 10, 20 }, 45, TestEnum::ENUM_LITERAL_2);\r\n\r\nstd::string funcName{ \"ServiceAPI1\" };\r\n\r\n\/\/ Fonksiyon cagrildi mi kontrolu asagidaki gibi yapabiliriz\r\nASSERT_TRUE(mDummyServerStub-&gt;IsFunctionCalled(funcName));\r\n\r\n\/\/ Gecirilen parametreleri degerlerini karislastirarak kontrol edebiliriz\r\nASSERT_EQ(*mDummyServerStub-&gt;GetParameter&lt;bool&gt;(funcName, 0), true);\r\nASSERT_EQ((*mDummyServerStub-&gt;GetParameter&lt;Obj&gt;(funcName, 1)).X, 10);\r\nASSERT_EQ((*mDummyServerStub-&gt;GetParameter&lt;Obj&gt;(funcName, 1)).Y, 20);\r\nASSERT_EQ(*mDummyServerStub-&gt;GetParameter&lt;int&gt;(funcName, 2), 45);\r\nASSERT_EQ(*mDummyServerStub-&gt;GetParameter&lt;TestEnum&gt;(funcName, 3), TestEnum::ENUM_LITERAL_2);\r\n\r\n\/\/ Ya da direk IsSame... API'lerini kullanabiliriz\r\nASSERT_TRUE(mDummyServerStub-&gt;IsSameSimpleParameter&lt;bool&gt;(funcName, 0, true));\r\nASSERT_TRUE(mDummyServerStub-&gt;IsSameComplexParameter&lt;Obj&gt;(funcName, 1, Obj{10, 20}));\r\nASSERT_TRUE(mDummyServerStub-&gt;IsSameSimpleParameter&lt;int&gt;(funcName, 2, 45));\r\nASSERT_TRUE(mDummyServerStub-&gt;IsSameSimpleParameter&lt;TestEnum&gt;(funcName, 3, TestEnum::ENUM_LITERAL_2));<\/pre>\n<p>\u015eunu belirtmeliyim ki, di\u011fer k\u00fct\u00fcphanelerde oldu\u011fu gibi, bu k\u00fct\u00fcphaneyi de en kolay \u00f6\u011frenme y\u00f6ntemlerinden biri, ilgili birim testlerini incelemek olacakt\u0131r. Bu ba\u011flamda a\u015fa\u011f\u0131daki dizine ve ilgili testlere bir g\u00f6z atmak isteyebilirsiniz:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\/FunctionTracker\/tree\/main\/test\">https:\/\/github.com\/yazilimperver\/FunctionTracker\/tree\/main\/test<\/a><\/strong><\/span><\/p>\n<p>\u015eimdi gelelim bir di\u011fer konuya. Bu k\u00fct\u00fcphanede C++&#8217;a ili\u015fkin hangi kabiliyetleri kulland\u0131\u011f\u0131m\u0131z\u0131 s\u0131ralayal\u0131m, elbette bunlara ili\u015fkin daha \u00f6nce karalad\u0131\u011f\u0131m yaz\u0131lar ile birlikte \ud83d\ude42<\/p>\n<ul>\n<li>std::unordered_map (<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/10\/25\/haftalik-c-2-konteynerler-ve-sirali-tutma\/\">Haftal\u0131k C++ 2 &#8211; Konteynerler ve S\u0131ral\u0131 Tutma<\/a><\/strong><\/span>)<\/li>\n<li>if ilklendirme ifadeleri (<a href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/10\/31\/english-weekly-c-3-if-switch-init-statements\/\"><span style=\"color: #008000;\"><strong>Haftal\u0131k C++ 3 &#8211; if\/switch ilklendirme ifadeleri<\/strong><\/span><\/a>)<\/li>\n<li>std::optional (<a href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/04\/15\/haftalik-c-14-stdoptional\/\"><span style=\"color: #008000;\"><strong>Haftal\u0131k C++ 14 \u2013 std::optional<\/strong><\/span>)<\/a><\/li>\n<li>std::any (<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/14\/haftalik-c-18-stdany\/\">Haftal\u0131k C++ 18 \u2013 std::any<\/a><\/strong><\/span>)<\/li>\n<li>Variadic templates (<a href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/04\/27\/haftalik-c-37-degisken-sablonlar-variadic-templates\/\"><span style=\"color: #008000;\"><strong>Haftal\u0131k C++ 37 &#8211; De\u011fi\u015fken \u015eablonlar (&#8220;Variadic Templates&#8221;<\/strong><\/span>)<\/a><\/li>\n<\/ul>\n<p>Yaz\u0131m\u0131 tamamlamadan \u00f6nce, bu k\u00fct\u00fcphaneye ili\u015fkin olas\u0131 geli\u015ftirilebilecek konulara da bakacak olursak, ilk akl\u0131ma gelen, fonksiyonlar\u0131n d\u00f6n\u00fc\u015f de\u011ferlerini girebilmek olacak. Elbette sizlerin ba\u015fka \u00f6nerisi yoksa \ud83d\ude42<\/p>\n<p>Bol testli g\u00fcnler diliyorum.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar, bir ba\u015fka haftal\u0131k C++ yaz\u0131s\u0131 ile birlikteyiz. Bu yaz\u0131mda asl\u0131nda bir ihtiya\u00e7 sonucu geli\u015ftirdi\u011fim, kulland\u0131ktan sonra da sizler ile payla\u015fmak istedi\u011fim bir k\u00fct\u00fcphaneden bahsedece\u011fim. Tabi k\u00fct\u00fcphane dedi\u011fime bakmay\u0131n, asl\u0131nda tek ba\u015fl\u0131k dosyas\u0131ndan olu\u015fan bir k\u00fct\u00fcphane. \u015eu an olduk\u00e7a basit ve kabiliyet anlam\u0131nda sade ama birazdan bahsedece\u011fim ihtiya\u00e7lar\u0131n bir \u00e7o\u011funu kar\u015f\u0131lad\u0131 ve sizlere de&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":174,"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":[41,188],"tags":[982,986,983,42,406,403,985,984,473,858],"class_list":["post-2512","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-modern-c","category-yazilim-muhendisligi","tag-function-tracker","tag-if-ilklendirme-ifadeleri","tag-mock","tag-modern-c","tag-stdany","tag-stdoptional","tag-stdunordered_map","tag-stub","tag-unit-test","tag-variadic-templates"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 48 - &quot;Function Tracker&quot;: Basit bir &quot;Mock&quot; k\u00fct\u00fcphanesi - 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\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Haftal\u0131k C++ 48 - &quot;Function Tracker&quot;: Basit bir &quot;Mock&quot; k\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Merhaba arkada\u015flar, bir ba\u015fka haftal\u0131k C++ yaz\u0131s\u0131 ile birlikteyiz. Bu yaz\u0131mda asl\u0131nda bir ihtiya\u00e7 sonucu geli\u015ftirdi\u011fim, kulland\u0131ktan sonra da sizler ile payla\u015fmak istedi\u011fim bir k\u00fct\u00fcphaneden bahsedece\u011fim. Tabi k\u00fct\u00fcphane dedi\u011fime bakmay\u0131n, asl\u0131nda tek ba\u015fl\u0131k dosyas\u0131ndan olu\u015fan bir k\u00fct\u00fcphane. \u015eu an olduk\u00e7a basit ve kabiliyet anlam\u0131nda sade ama birazdan bahsedece\u011fim ihtiya\u00e7lar\u0131n bir \u00e7o\u011funu kar\u015f\u0131lad\u0131 ve sizlere de... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-15T20:49:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-15T20:59:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png\" \/>\n\t<meta property=\"og:image:width\" content=\"32\" \/>\n\t<meta property=\"og:image:height\" content=\"32\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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=\"1 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\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 48 &#8211; &#8220;Function Tracker&#8221;: Basit bir &#8220;Mock&#8221; k\u00fct\u00fcphanesi\",\"datePublished\":\"2022-04-15T20:49:59+00:00\",\"dateModified\":\"2022-04-15T20:59:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/\"},\"wordCount\":831,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"function tracker\",\"if ilklendirme ifadeleri\",\"mock\",\"Modern C++\",\"std::any\",\"std::optional\",\"std::unordered_map\",\"stub\",\"Unit Test\",\"variadic templates\"],\"articleSection\":[\"Modern C++\",\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/\",\"name\":\"Haftal\u0131k C++ 48 - \\\"Function Tracker\\\": Basit bir \\\"Mock\\\" k\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2022-04-15T20:49:59+00:00\",\"dateModified\":\"2022-04-15T20:59:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 48 &#8211; &#8220;Function Tracker&#8221;: Basit bir &#8220;Mock&#8221; k\u00fct\u00fcphanesi\"}]},{\"@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":"Haftal\u0131k C++ 48 - \"Function Tracker\": Basit bir \"Mock\" k\u00fct\u00fcphanesi - 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\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/","og_locale":"tr_TR","og_type":"article","og_title":"Haftal\u0131k C++ 48 - \"Function Tracker\": Basit bir \"Mock\" k\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Merhaba arkada\u015flar, bir ba\u015fka haftal\u0131k C++ yaz\u0131s\u0131 ile birlikteyiz. Bu yaz\u0131mda asl\u0131nda bir ihtiya\u00e7 sonucu geli\u015ftirdi\u011fim, kulland\u0131ktan sonra da sizler ile payla\u015fmak istedi\u011fim bir k\u00fct\u00fcphaneden bahsedece\u011fim. Tabi k\u00fct\u00fcphane dedi\u011fime bakmay\u0131n, asl\u0131nda tek ba\u015fl\u0131k dosyas\u0131ndan olu\u015fan bir k\u00fct\u00fcphane. \u015eu an olduk\u00e7a basit ve kabiliyet anlam\u0131nda sade ama birazdan bahsedece\u011fim ihtiya\u00e7lar\u0131n bir \u00e7o\u011funu kar\u015f\u0131lad\u0131 ve sizlere de... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2022-04-15T20:49:59+00:00","article_modified_time":"2022-04-15T20:59:48+00:00","og_image":[{"width":32,"height":32,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"1 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 48 &#8211; &#8220;Function Tracker&#8221;: Basit bir &#8220;Mock&#8221; k\u00fct\u00fcphanesi","datePublished":"2022-04-15T20:49:59+00:00","dateModified":"2022-04-15T20:59:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/"},"wordCount":831,"commentCount":2,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["function tracker","if ilklendirme ifadeleri","mock","Modern C++","std::any","std::optional","std::unordered_map","stub","Unit Test","variadic templates"],"articleSection":["Modern C++","Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/","name":"Haftal\u0131k C++ 48 - \"Function Tracker\": Basit bir \"Mock\" k\u00fct\u00fcphanesi - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2022-04-15T20:49:59+00:00","dateModified":"2022-04-15T20:59:48+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/04\/15\/haftalik-c-48-function-tracker-basit-bir-mock-kutuphanesi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 48 &#8211; &#8220;Function Tracker&#8221;: Basit bir &#8220;Mock&#8221; k\u00fct\u00fcphanesi"}]},{"@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\/2512","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=2512"}],"version-history":[{"count":10,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2512\/revisions"}],"predecessor-version":[{"id":2523,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2512\/revisions\/2523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}