{"id":29789,"date":"2025-09-19T18:40:23","date_gmt":"2025-09-19T15:40:23","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/"},"modified":"2025-09-19T18:40:23","modified_gmt":"2025-09-19T15:40:23","slug":"mockito-arguman-yakalayici-captor-annotasyonu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/","title":{"rendered":"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu"},"content":{"rendered":"<p># Mockito ArgumentCaptor ve @Captor Annotasyonu: Geli\u015fmi\u015f Test Senaryolar\u0131 \u0130\u00e7in Tam Bir K\u0131lavuz<\/p>\n<p>Mockito ile birim testler yazarken, method parametrelerinin de\u011ferlerini do\u011frulama ihtiyac\u0131 s\u0131kl\u0131kla kar\u015f\u0131la\u015f\u0131lan bir durumdur.  \u00d6zellikle mock edilen methodlar\u0131n ald\u0131\u011f\u0131 arg\u00fcmanlar\u0131 incelemek istedi\u011finizde, basit e\u015fle\u015ftirme i\u015flemleri yetersiz kalabilir. \u0130\u015fte tam bu noktada Mockito&#8217;nun g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri olan <code class=\"language-\">ArgumentCaptor<\/code> ve <code class=\"language-\">@Captor<\/code> annotasyonu devreye giriyor. Bu makalede, Mockito <code class=\"language-\">ArgumentCaptor<\/code> ve <code class=\"language-\">@Captor<\/code> annotasyonunu ad\u0131m ad\u0131m ele alarak,  geli\u015fmi\u015f test senaryolar\u0131nda nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde a\u00e7\u0131klayaca\u011f\u0131z.  Bu makale, yeni ba\u015flayanlardan ileri seviye geli\u015ftiricilere kadar geni\u015f bir okuyucu kitlesine hitap etmektedir.<\/p>\n<p><strong>Mockito ve Birim Testler: Temel Kavramlar<\/strong><\/p>\n<p>Birim testleri, yaz\u0131l\u0131m geli\u015ftirmenin olmazsa olmaz bir par\u00e7as\u0131d\u0131r.  Kodun k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z par\u00e7alar\u0131n\u0131 test ederek, beklenen davran\u0131\u015f\u0131 do\u011frulamay\u0131 ve hatalar\u0131 erken a\u015famada yakalamay\u0131 sa\u011flar. Mockito, Java i\u00e7in pop\u00fcler bir mocking k\u00fct\u00fcphanesidir ve birim testlerini yazmay\u0131 kolayla\u015ft\u0131r\u0131r.  Mock objeler olu\u015fturarak, ger\u00e7ek ba\u011f\u0131ml\u0131l\u0131klar\u0131 sim\u00fcle eder ve testlerin ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.  Ancak, bazen mock edilen methodlara verilen parametrelerin de\u011ferlerini do\u011frulamak gerekebilir. \u0130\u015fte bu noktada <code class=\"language-\">ArgumentCaptor<\/code> devreye girer.<\/p>\n<p><strong>Mockito ArgumentCaptor: Nas\u0131l Kullan\u0131l\u0131r? (Ad\u0131m Ad\u0131m Uygulama)<\/strong><\/p>\n<p><code class=\"language-\">ArgumentCaptor<\/code>, mock edilen bir methoda verilen arg\u00fcmanlar\u0131 yakalamak ve daha sonra bu arg\u00fcmanlar\u0131 do\u011frulamak i\u00e7in kullan\u0131l\u0131r.  A\u015fa\u011f\u0131daki \u00f6rnekte, bir <code class=\"language-\">UserService<\/code> s\u0131n\u0131f\u0131n\u0131n <code class=\"language-\">createUser<\/code> methodunun do\u011fru parametrelerle \u00e7a\u011fr\u0131l\u0131p \u00e7a\u011fr\u0131lmad\u0131\u011f\u0131n\u0131 test edece\u011fiz.<\/p>\n<p><strong>Yeni Ba\u015flayan:<\/strong><\/p>\n<p>\u00d6ncelikle gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 ekleyelim:<\/p>\n<pre class=\"language-xml\"><code>&lt;dependency&gt;\n    &lt;groupId&gt;org.mockito&lt;\/groupId&gt;\n    &lt;artifactId&gt;mockito-core&lt;\/artifactId&gt;\n    &lt;version&gt;4.11.0&lt;\/version&gt; &lt;!-- En g\u00fcncel versiyonu kullan\u0131n --&gt;\n    &lt;scope&gt;test&lt;\/scope&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n<p>\u015eimdi basit bir \u00f6rnek:<\/p>\n<pre class=\"language-java\"><code>import org.junit.jupiter.api.Test;\nimport org.mockito.ArgumentCaptor;\nimport org.mockito.Mockito;\n\nimport static org.junit.jupiter.api.Assertions.assertEquals;\nimport static org.mockito.Mockito.verify;\n\nclass UserServiceTest {\n\n    @Test\n    void testCreateUser() {\n        UserService userService = Mockito.mock(UserService.class);\n        User user = new User(&quot;testUser&quot;, &quot;password&quot;);\n\n        userService.createUser(user);\n\n        ArgumentCaptor&lt;User&gt; userCaptor = ArgumentCaptor.forClass(User.class);\n        verify(userService).createUser(userCaptor.capture());\n\n        assertEquals(&quot;testUser&quot;, userCaptor.getValue().getUsername());\n        assertEquals(&quot;password&quot;, userCaptor.getValue().getPassword());\n    }\n\n    static class User {\n        String username;\n        String password;\n\n        User(String username, String password) {\n            this.username = username;\n            this.password = password;\n        }\n\n        String getUsername() { return username; }\n        String getPassword() { return password; }\n    }\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code class=\"language-\">ArgumentCaptor<User><\/code> ile <code class=\"language-\">User<\/code> nesnesini yakal\u0131yoruz. <code class=\"language-\">verify<\/code> methodu ile <code class=\"language-\">createUser<\/code> methodunun \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frulad\u0131ktan sonra, <code class=\"language-\">userCaptor.getValue()<\/code> ile yakalanan <code class=\"language-\">User<\/code> nesnesinin de\u011ferlerini do\u011frulayabiliyoruz.<\/p>\n<p><strong>@Captor Annotasyonu: Daha Temiz Kod<\/strong><\/p>\n<p><code class=\"language-\">ArgumentCaptor<\/code>&#8216;\u0131 manuel olarak olu\u015fturmak yerine, <code class=\"language-\">@Captor<\/code> annotasyonunu kullanarak daha temiz ve okunabilir kod yazabiliriz.  JUnit&#8217;te <code class=\"language-\">@RunWith(MockitoJUnitRunner.class)<\/code> annotasyonunu kullanarak <code class=\"language-\">@Captor<\/code> annotasyonunu kullanabiliriz. Ancak JUnit Jupiter ile <code class=\"language-\">@ExtendWith(MockitoExtension.class)<\/code> annotasyonunu kullanmak daha modern yakla\u015f\u0131md\u0131r.<\/p>\n<p><strong>Orta Seviye:<\/strong><\/p>\n<pre class=\"language-java\"><code>import org.junit.jupiter.api.Test;\nimport org.junit.jupiter.api.extension.ExtendWith;\nimport org.mockito.ArgumentCaptor;\nimport org.mockito.Captor;\nimport org.mockito.Mock;\nimport org.mockito.junit.jupiter.MockitoExtension;\n\nimport static org.junit.jupiter.api.Assertions.assertEquals;\nimport static org.mockito.Mockito.verify;\n\n@ExtendWith(MockitoExtension.class)\nclass UserServiceTest {\n\n    @Mock\n    UserService userService;\n\n    @Captor\n    ArgumentCaptor&lt;User&gt; userCaptor;\n\n    @Test\n    void testCreateUserWithCaptorAnnotation() {\n        User user = new User(&quot;testUser2&quot;, &quot;password2&quot;);\n        userService.createUser(user);\n\n        verify(userService).createUser(userCaptor.capture());\n\n        assertEquals(&quot;testUser2&quot;, userCaptor.getValue().getUsername());\n        assertEquals(&quot;password2&quot;, userCaptor.getValue().getPassword());\n    }\n\n    \/\/User s\u0131n\u0131f\u0131 yukar\u0131daki \u00f6rnekteki gibidir.\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code class=\"language-\">@Captor<\/code> annotasyonu ile <code class=\"language-\">userCaptor<\/code> de\u011fi\u015fkenini otomatik olarak olu\u015fturduk.  Bu yakla\u015f\u0131m kodun okunabilirli\u011fini art\u0131r\u0131r ve hata olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.<\/p>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryolar\u0131: Vaka Analizleri<\/strong><\/p>\n<p>Bir e-ticaret uygulamas\u0131 d\u00fc\u015f\u00fcn\u00fcn.  Sipari\u015f i\u015flemlerini test ederken, sipari\u015fin do\u011fru \u00fcr\u00fcnlerle ve do\u011fru miktarlarda olu\u015fturuldu\u011funu do\u011frulamak isteyebilirsiniz.  <code class=\"language-\">ArgumentCaptor<\/code> kullanarak, sipari\u015f nesnesinin \u00f6zelliklerini do\u011frulayabilirsiniz.<\/p>\n<p><strong>Orta Seviye:<\/strong><\/p>\n<p>\u00d6rne\u011fin, bir <code class=\"language-\">Order<\/code> s\u0131n\u0131f\u0131m\u0131z ve <code class=\"language-\">OrderService<\/code> s\u0131n\u0131f\u0131m\u0131z olsun:<\/p>\n<pre class=\"language-java\"><code>class Order {\n    List&lt;OrderItem&gt; items;\n    \/\/ ... di\u011fer \u00f6zellikler\n}\n\nclass OrderItem {\n    Product product;\n    int quantity;\n}\n\nclass OrderService {\n    void createOrder(Order order) { \/* ... *\/ }\n}<\/code><\/pre>\n<p>Test s\u0131n\u0131f\u0131m\u0131zda:<\/p>\n<pre class=\"language-java\"><code>@ExtendWith(MockitoExtension.class)\nclass OrderServiceTest {\n    @Mock\n    OrderService orderService;\n    @Captor\n    ArgumentCaptor&lt;Order&gt; orderCaptor;\n\n    @Test\n    void testCreateOrder() {\n        Product product1 = new Product(&quot;\u00dcr\u00fcn 1&quot;, 10.0);\n        Product product2 = new Product(&quot;\u00dcr\u00fcn 2&quot;, 20.0);\n\n        List&lt;OrderItem&gt; items = List.of(\n                new OrderItem(product1, 2),\n                new OrderItem(product2, 1)\n        );\n\n        Order order = new Order(items); \/\/ Constructor eklemeniz gerekecek\n\n        orderService.createOrder(order);\n        verify(orderService).createOrder(orderCaptor.capture());\n\n        assertEquals(2, orderCaptor.getValue().getItems().size());\n        assertEquals(product1, orderCaptor.getValue().getItems().get(0).getProduct());\n        assertEquals(2, orderCaptor.getValue().getItems().get(0).getQuantity());\n        \/\/ ... di\u011fer do\u011frulamalar\n    }\n}<\/code><\/pre>\n<p>Bu \u00f6rnek, <code class=\"language-\">ArgumentCaptor<\/code>&#8216;\u0131n karma\u015f\u0131k nesnelerin \u00f6zelliklerini do\u011frulamak i\u00e7in nas\u0131l kullan\u0131labilece\u011fini g\u00f6stermektedir.<\/p>\n<p><strong>Performans Optimizasyonu ve \u0130pu\u00e7lar\u0131<\/strong><\/p>\n<p><code class=\"language-\">ArgumentCaptor<\/code> kullan\u0131m\u0131 performans\u0131 etkileyebilir.  \u00c7ok say\u0131da arg\u00fcman yakalamak veya b\u00fcy\u00fck nesneleri yakalamak performans sorunlar\u0131na yol a\u00e7abilir.  Bu nedenle, gereksiz arg\u00fcman yakalama i\u015flemlerinden ka\u00e7\u0131nmak \u00f6nemlidir.  Sadece ger\u00e7ekten do\u011frulamak istedi\u011finiz arg\u00fcmanlar\u0131 yakalamaya odaklan\u0131n.<\/p>\n<p><strong>\u0130leri D\u00fczey Kullan\u0131mlar ve Edge Case&#8217;ler<\/strong><\/p>\n<p><code class=\"language-\">ArgumentCaptor<\/code>&#8216;\u0131 listeler, diziler veya karma\u015f\u0131k nesnelerle birlikte kullan\u0131rken dikkatli olmak gerekir.  Listelerin e\u015fitli\u011fini do\u011frulamak i\u00e7in <code class=\"language-\">assertEquals<\/code> yerine <code class=\"language-\">assertArrayEquals<\/code> veya \u00f6zel e\u015fitleme y\u00f6ntemleri kullanman\u0131z gerekebilir.  Ayr\u0131ca, null de\u011ferleri veya bo\u015f listeleri do\u011fru bir \u015fekilde ele almak i\u00e7in ek kontroller eklemeniz gerekebilir.<\/p>\n<p><strong>Mockito ArgumentCaptor&#8217;\u0131n Performans Analizi<\/strong><\/p>\n<p>\u00c7ok say\u0131da arg\u00fcman yakalama i\u015flemi, test s\u00fcresini uzatabilir.  \u00d6zellikle b\u00fcy\u00fck veri k\u00fcmeleriyle \u00e7al\u0131\u015f\u0131rken, performans sorunlar\u0131 ortaya \u00e7\u0131kabilir.  Bu sorunlar\u0131 en aza indirmek i\u00e7in, sadece gerekli arg\u00fcmanlar\u0131 yakalamaya odaklan\u0131n ve gereksiz arg\u00fcman yakalama i\u015flemlerinden ka\u00e7\u0131n\u0131n.  Ayr\u0131ca, <code class=\"language-\">ArgumentCaptor<\/code> kullan\u0131m\u0131 yerine, m\u00fcmk\u00fcnse daha performansl\u0131 alternatif y\u00f6ntemler kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz.  \u00d6rne\u011fin, <code class=\"language-\">Mockito.any()<\/code> gibi e\u015fle\u015ftirme y\u00f6ntemlerini kullanarak, baz\u0131 arg\u00fcmanlar\u0131 do\u011frulamadan ge\u00e7ebilirsiniz.<\/p>\n<p><strong>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/strong><\/p>\n<p>1. <strong><code class=\"language-\">ArgumentCaptor<\/code>&#8216;\u0131 hangi durumlarda kullanmal\u0131y\u0131m?<\/strong>  Mock edilen bir methoda verilen arg\u00fcmanlar\u0131 do\u011frulamak istedi\u011finizde, \u00f6zellikle arg\u00fcmanlar\u0131n karma\u015f\u0131k yap\u0131da oldu\u011fu durumlarda <code class=\"language-\">ArgumentCaptor<\/code> kullanmal\u0131s\u0131n\u0131z.<\/p>\n<p>2. <strong><code class=\"language-\">@Captor<\/code> annotasyonu <code class=\"language-\">ArgumentCaptor<\/code>&#8216;dan nas\u0131l farkl\u0131d\u0131r?<\/strong> <code class=\"language-\">@Captor<\/code> annotasyonu, <code class=\"language-\">ArgumentCaptor<\/code> nesnesini otomatik olarak olu\u015fturarak kodun okunabilirli\u011fini art\u0131r\u0131r.<\/p>\n<p>3. <strong><code class=\"language-\">ArgumentCaptor<\/code> kullan\u0131m\u0131 performans\u0131 nas\u0131l etkiler?<\/strong> \u00c7ok say\u0131da arg\u00fcman yakalamak veya b\u00fcy\u00fck nesneleri yakalamak performans\u0131 olumsuz etkileyebilir. Gereksiz yakalamalardan ka\u00e7\u0131n\u0131n.<\/p>\n<p>4. <strong><code class=\"language-\">ArgumentCaptor<\/code> ile null de\u011ferleri nas\u0131l do\u011frulayabilirim?<\/strong>  <code class=\"language-\">userCaptor.getValue() == null<\/code> kontrol\u00fc ile null de\u011ferleri do\u011frulayabilirsiniz.<\/p>\n<p>5. <strong><code class=\"language-\">ArgumentCaptor<\/code>&#8216;\u0131 listelerle nas\u0131l kullanabilirim?<\/strong> Listeleri do\u011frulamak i\u00e7in <code class=\"language-\">assertEquals<\/code> yerine <code class=\"language-\">assertArrayEquals<\/code> veya \u00f6zel e\u015fitleme y\u00f6ntemleri kullanabilirsiniz.<\/p>\n<p>Bu makalede, Mockito <code class=\"language-\">ArgumentCaptor<\/code> ve <code class=\"language-\">@Captor<\/code> annotasyonunun nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klad\u0131k.  Umar\u0131m bu bilgiler, birim testlerinizi daha etkili ve g\u00fcvenilir hale getirmenize yard\u0131mc\u0131 olur.  Daha fazla bilgi i\u00e7in [fatihsoysal.com](https:\/\/fatihsoysal.com) adresini ziyaret edebilirsiniz.<\/p>\n<p>Yazar: Fatih Soysal<\/p>\n","protected":false},"excerpt":{"rendered":"# Mockito ArgumentCaptor ve @Captor Annotasyonu: Geli\u015fmi\u015f Test Senaryolar\u0131 \u0130\u00e7in Tam Bir K\u0131lavuz Mockito ile birim testler yazarken,&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-29789","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu<\/title>\n<meta name=\"description\" content=\"Hi\u00e7bir etiketi bulunamad\u0131.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu\" \/>\n<meta property=\"og:description\" content=\"Hi\u00e7bir etiketi bulunamad\u0131.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-19T15:40:23+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu\",\"datePublished\":\"2025-09-19T15:40:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/\"},\"wordCount\":821,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/\",\"name\":\"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-19T15:40:23+00:00\",\"description\":\"Hi\u00e7bir etiketi bulunamad\u0131.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu","description":"Hi\u00e7bir etiketi bulunamad\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:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/","og_locale":"tr_TR","og_type":"article","og_title":"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu","og_description":"Hi\u00e7bir etiketi bulunamad\u0131.","og_url":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-19T15:40:23+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu","datePublished":"2025-09-19T15:40:23+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/"},"wordCount":821,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/","url":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/","name":"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-19T15:40:23+00:00","description":"Hi\u00e7bir etiketi bulunamad\u0131.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/mockito-arguman-yakalayici-captor-annotasyonu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Mockito Arg\u00fcman Yakalay\u0131c\u0131, @Captor Annotasyonu"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/29789","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=29789"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/29789\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=29789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=29789"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=29789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}