{"id":37730,"date":"2026-01-13T18:41:38","date_gmt":"2026-01-13T15:41:38","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37730"},"modified":"2026-01-13T18:41:38","modified_gmt":"2026-01-13T15:41:38","slug":"mockito-verify-detayli-bir-teknik-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/","title":{"rendered":"Mockito Verify: Detayl\u0131 Bir Teknik Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Mockito Verify: Detayl\u0131 Bir Teknik Rehber<\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde, \u00f6zellikle birim testleri (unit tests) yazarken, kodumuzun beklenen \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak kritik \u00f6neme sahiptir. Mockito, Java uygulamalar\u0131 i\u00e7in pop\u00fcler bir mocking framework&#8217;\u00fcd\u00fcr ve bu s\u00fcre\u00e7te bize b\u00fcy\u00fck kolayl\u0131klar sa\u011flar. Mockito&#8217;nun en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri de <code>verify()<\/code> metodudur. Bu rehberde, <code>Mockito.verify()<\/code>&#8216;\u0131n ne oldu\u011funu, nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131, \u00e7e\u015fitli senaryolarda nas\u0131l uyguland\u0131\u011f\u0131n\u0131 ve testlerinizi daha sa\u011flam hale getirmek i\u00e7in pratik ipu\u00e7lar\u0131n\u0131 ayr\u0131nt\u0131l\u0131 olarak inceleyece\u011fiz.<\/p>\n<h3>Mockito Verify&#8217;a Giri\u015f ve Temel Kullan\u0131m<\/h3>\n<p>Birim testlerinde, test etti\u011fimiz bir s\u0131n\u0131f\u0131n (System Under Test &#8211; SUT) ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek isteriz. Bu ba\u011f\u0131ml\u0131l\u0131klar genellikle di\u011fer s\u0131n\u0131flar veya servislerdir. Mockito, bu ba\u011f\u0131ml\u0131l\u0131klar\u0131n &#8220;sahte&#8221; (mock) versiyonlar\u0131n\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flar. Bu sahte nesneler (mock objects) sayesinde, SUT&#8217;un kendi mant\u0131\u011f\u0131na odaklanabiliriz, ba\u011f\u0131ml\u0131l\u0131klar\u0131n ger\u00e7ek davran\u0131\u015flar\u0131na veya d\u0131\u015f etkilere tak\u0131lmay\u0131z.<\/p>\n<h4>Neden Verify Kullan\u0131r\u0131z?<\/h4>\n<p><code>Mockito.verify()<\/code> metodu, bir mock nesne \u00fczerinde belirli bir metodun belirli arg\u00fcmanlarla ve belirli say\u0131da \u00e7a\u011fr\u0131l\u0131p \u00e7a\u011fr\u0131lmad\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in kullan\u0131l\u0131r. Bu, SUT&#8217;un ba\u011f\u0131ml\u0131l\u0131klar\u0131yla do\u011fru \u015fekilde etkile\u015fime girdi\u011finden emin olman\u0131n tek yoludur. \u00d6rne\u011fin, bir servis metodunun ba\u015far\u0131l\u0131 bir i\u015flemden sonra bir veritaban\u0131 kayd\u0131n\u0131 kaydetme metodunu \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131 veya bir hata durumunda bir loglama metodunu \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131 do\u011frulamak isteyebilirsiniz. <code>verify()<\/code> olmadan, SUT&#8217;un i\u00e7sel davran\u0131\u015flar\u0131n\u0131 de\u011fil, sadece nihai \u00e7\u0131kt\u0131s\u0131n\u0131 test edersiniz ki bu da baz\u0131 kritik etkile\u015fimlerin g\u00f6zden ka\u00e7mas\u0131na neden olabilir.<\/p>\n<h4>Temel Verify S\u00f6z Dizimi<\/h4>\n<p>Temel <code>verify()<\/code> kullan\u0131m\u0131 olduk\u00e7a basittir:<\/p>\n<pre><code class=\"language-java\">import org.junit.jupiter.api.Test;\nimport org.mockito.Mockito;\nimport static org.mockito.Mockito.*;\n\n\/\/ Test edilecek bir servis\ninterface UserService {\n    void createUser(String username, String email);\n    void deleteUser(String username);\n    String getUserDetails(String username);\n}\n\n\/\/ UserService'i kullanan bir s\u0131n\u0131f\nclass UserProcessor {\n    private UserService userService;\n\n    public UserProcessor(UserService userService) {\n        this.userService = userService;\n    }\n\n    public void processNewUser(String username, String email) {\n        \/\/ Baz\u0131 i\u015f mant\u0131\u011f\u0131...\n        userService.createUser(username, email);\n    }\n\n    public void removeExistingUser(String username) {\n        \/\/ Baz\u0131 i\u015f mant\u0131\u011f\u0131...\n        userService.deleteUser(username);\n    }\n}\n\npublic class UserProcessorTest {\n\n    @Test\n    void shouldCreateUserWhenProcessingNewUser() {\n        \/\/ 1. Mock nesnesi olu\u015ftur\n        UserService mockUserService = mock(UserService.class);\n\n        \/\/ 2. Test edilecek s\u0131n\u0131f\u0131 (SUT) mock ile ba\u015flat\n        UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n        \/\/ 3. SUT \u00fczerinde bir metod \u00e7a\u011f\u0131r\n        userProcessor.processNewUser(\"testuser\", \"test@example.com\");\n\n        \/\/ 4. Mock nesnesi \u00fczerindeki etkile\u015fimi do\u011frula\n        \/\/ mockUserService'in createUser metodunun \"testuser\" ve \"test@example.com\" arg\u00fcmanlar\u0131yla \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frula\n        verify(mockUserService).createUser(\"testuser\", \"test@example.com\");\n    }\n\n    @Test\n    void shouldDeleteUserWhenRemovingExistingUser() {\n        UserService mockUserService = mock(UserService.class);\n        UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n        userProcessor.removeExistingUser(\"olduser\");\n\n        \/\/ mockUserService'in deleteUser metodunun \"olduser\" arg\u00fcman\u0131yla \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frula\n        verify(mockUserService).deleteUser(\"olduser\");\n    }\n}<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>UserProcessor<\/code> s\u0131n\u0131f\u0131n\u0131n <code>processNewUser<\/code> metodunun ger\u00e7ekten de <code>UserService<\/code> \u00fczerindeki <code>createUser<\/code> metodunu belirli arg\u00fcmanlarla \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131 do\u011frulam\u0131\u015f olduk. E\u011fer <code>createUser<\/code> metodu hi\u00e7 \u00e7a\u011fr\u0131lmazsa veya farkl\u0131 arg\u00fcmanlarla \u00e7a\u011fr\u0131l\u0131rsa, test ba\u015far\u0131s\u0131z olacakt\u0131r.<\/p>\n<h3>\u00c7a\u011fr\u0131 Say\u0131s\u0131n\u0131 Do\u011frulama<\/h3>\n<p>Bazen bir metodun sadece \u00e7a\u011fr\u0131l\u0131p \u00e7a\u011fr\u0131lmad\u0131\u011f\u0131n\u0131 de\u011fil, ayn\u0131 zamanda ka\u00e7 kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 da do\u011frulamam\u0131z gerekebilir. Mockito, bunun i\u00e7in \u00e7e\u015fitli se\u00e7enekler sunar.<\/p>\n<h4>Tam Say\u0131da \u00c7a\u011fr\u0131 Do\u011frulama (<code>times()<\/code>)<\/h4>\n<p>Bir metodun tam olarak belirli bir say\u0131da \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in <code>times(int count)<\/code> kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-java\">\/\/ ... \u00f6nceki s\u0131n\u0131flar ve interface'ler ayn\u0131 ...\n\npublic class UserProcessorCallCountTest {\n\n    @Test\n    void shouldCallCreateUserOnceForSingleUser() {\n        UserService mockUserService = mock(UserService.class);\n        UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n        userProcessor.processNewUser(\"user1\", \"user1@example.com\");\n\n        \/\/ createUser metodunun tam olarak 1 kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frula\n        verify(mockUserService, times(1)).createUser(\"user1\", \"user1@example.com\");\n    }\n\n    @Test\n    void shouldCallCreateUserMultipleTimesForBatchProcessing() {\n        UserService mockUserService = mock(UserService.class);\n        UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n        \/\/ Varsayal\u0131m ki UserProcessor'da b\u00f6yle bir metod var\n        \/\/ public void processMultipleUsers(List<Pair<String, String>> users) { ... }\n        \/\/ Basitlik i\u00e7in test i\u00e7inde birden fazla \u00e7a\u011fr\u0131 yapal\u0131m\n        userProcessor.processNewUser(\"userA\", \"a@example.com\");\n        userProcessor.processNewUser(\"userB\", \"b@example.com\");\n        userProcessor.processNewUser(\"userC\", \"c@example.com\");\n\n        \/\/ createUser metodunun tam olarak 3 kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frula\n        verify(mockUserService, times(3)).createUser(anyString(), anyString()); \/\/ Arg\u00fcman e\u015fle\u015ftiricilerle\n    }\n}<\/code><\/pre>\n<h4>En Az Bir Kez \u00c7a\u011fr\u0131 Do\u011frulama (<code>atLeastOnce()<\/code>)<\/h4>\n<p>Bir metodun en az bir kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131ndan emin olmak i\u00e7in <code>atLeastOnce()<\/code> kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-java\">\/\/ ...\n@Test\nvoid shouldCallDeleteUserAtLeastOnceWhenRemovingUsers() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    userProcessor.removeExistingUser(\"userX\");\n    \/\/ Belki bir ko\u015ful alt\u0131nda bir kez daha \u00e7a\u011fr\u0131l\u0131yor olabilir,\n    \/\/ ama test sadece en az bir kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131ndan emin olmak istiyor.\n    \/\/ userProcessor.removeExistingUser(\"userX\"); \/\/ Bu sat\u0131r olsa da test ge\u00e7erdi\n\n    verify(mockUserService, atLeastOnce()).deleteUser(\"userX\");\n}<\/code><\/pre>\n<h4>Hi\u00e7 \u00c7a\u011fr\u0131lmad\u0131\u011f\u0131n\u0131 Do\u011frulama (<code>never()<\/code>)<\/h4>\n<p>Bir metodun kesinlikle hi\u00e7 \u00e7a\u011fr\u0131lmad\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in <code>never()<\/code> kullan\u0131r\u0131z. <code>times(0)<\/code> ile ayn\u0131d\u0131r.<\/p>\n<pre><code class=\"language-java\">\/\/ ...\n@Test\nvoid shouldNeverCallDeleteUserWhenOnlyCreatingUsers() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    userProcessor.processNewUser(\"newuser\", \"new@example.com\");\n    \/\/ deleteUser metodunun hi\u00e7 \u00e7a\u011fr\u0131lmad\u0131\u011f\u0131n\u0131 do\u011frula\n    verify(mockUserService, never()).deleteUser(anyString());\n}<\/code><\/pre>\n<h4>En Az\/En Fazla Belirli Say\u0131da \u00c7a\u011fr\u0131 (<code>atLeast()<\/code>, <code>atMost()<\/code>)<\/h4>\n<p>Bir metodun belirli bir say\u0131dan en az veya en fazla \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in <code>atLeast(int min)<\/code> ve <code>atMost(int max)<\/code> kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-java\">\/\/ ...\n@Test\nvoid shouldCallCreateUserAtLeastTwiceAndAtMostFiveTimes() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    userProcessor.processNewUser(\"u1\", \"u1@example.com\");\n    userProcessor.processNewUser(\"u2\", \"u2@example.com\");\n    userProcessor.processNewUser(\"u3\", \"u3@example.com\"); \/\/ 3 kez \u00e7a\u011fr\u0131ld\u0131\n\n    verify(mockUserService, atLeast(2)).createUser(anyString(), anyString()); \/\/ En az 2 kez \u00e7a\u011fr\u0131ld\u0131 m\u0131? Evet.\n    verify(mockUserService, atMost(5)).createUser(anyString(), anyString());  \/\/ En fazla 5 kez \u00e7a\u011fr\u0131ld\u0131 m\u0131? Evet.\n}<\/code><\/pre>\n<h3>Arg\u00fcmanlar\u0131 Do\u011frulama<\/h3>\n<p>Bir metodun do\u011fru say\u0131da \u00e7a\u011fr\u0131lmas\u0131n\u0131n yan\u0131 s\u0131ra, do\u011fru arg\u00fcmanlarla \u00e7a\u011fr\u0131ld\u0131\u011f\u0131ndan emin olmak da \u00e7ok \u00f6nemlidir.<\/p>\n<h4>Tam E\u015fle\u015fme ile Arg\u00fcman Do\u011frulama<\/h4>\n<p>En basit arg\u00fcman do\u011frulama \u015fekli, beklenen arg\u00fcmanlar\u0131 do\u011frudan <code>verify()<\/code> metoduna ge\u00e7irmektir. Bu, arg\u00fcmanlar\u0131n tam olarak e\u015fle\u015fmesini gerektirir.<\/p>\n<pre><code class=\"language-java\">\/\/ ...\n@Test\nvoid shouldCallCreateUserWithExactArguments() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    userProcessor.processNewUser(\"exactUser\", \"exact@example.com\");\n\n    \/\/ createUser metodunun tam olarak bu arg\u00fcmanlarla \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frula\n    verify(mockUserService).createUser(\"exactUser\", \"exact@example.com\");\n}<\/code><\/pre>\n<h4>Arg\u00fcman E\u015fle\u015ftiriciler (<code>Argument Matchers<\/code>) ile Do\u011frulama<\/h4>\n<p>Bazen arg\u00fcmanlar\u0131n tam de\u011ferlerini bilmeyiz veya esnek bir e\u015fle\u015fme sa\u011flamak isteriz. Mockito, bunun i\u00e7in <code>ArgumentMatchers<\/code> s\u0131n\u0131f\u0131n\u0131 sa\u011flar.<\/p>\n<p>*   <code>any()<\/code>: Herhangi bir nesne.<br \/>\n*   <code>anyString()<\/code>, <code>anyInt()<\/code>, <code>anyLong()<\/code> vb.: Belirli bir t\u00fcrden herhangi bir de\u011fer.<br \/>\n*   <code>eq(value)<\/code>: Belirli bir de\u011fere e\u015fit. <code>any()<\/code> ile kar\u0131\u015ft\u0131\u011f\u0131nda kullan\u0131l\u0131r.<br \/>\n*   <code>isA(Class<?> clazz)<\/code>: Belirli bir t\u00fcr\u00fcn \u00f6rne\u011fi.<br \/>\n*   <code>argThat(Matcher<T> matcher)<\/code>: \u00d6zel bir e\u015fle\u015fme mant\u0131\u011f\u0131 tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-java\">import org.mockito.ArgumentMatchers; \/\/ Import etmeyi unutmay\u0131n\n\n\/\/ ...\n@Test\nvoid shouldCallCreateUserWithAnyStringArguments() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    userProcessor.processNewUser(\"dynamicUser123\", \"dynamic@mail.com\");\n\n    \/\/ createUser metodunun herhangi iki String arg\u00fcman\u0131yla \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frula\n    verify(mockUserService).createUser(anyString(), anyString());\n}\n\n@Test\nvoid shouldCallDeleteUserWithSpecificUsernameAndAnyEmail() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    \/\/ Varsayal\u0131m ki deleteUser metodu iki arg\u00fcman al\u0131yor\n    \/\/ interface UserService { void deleteUser(String username, String reason); }\n    \/\/ Test i\u00e7in UserProcessor'\u0131 biraz de\u011fi\u015ftirelim\n    \/\/ public void removeExistingUser(String username, String reason) { userService.deleteUser(username, reason); }\n\n    \/\/ Bu test senaryosu i\u00e7in orijinal deleteUser(String) metodunu kullanaca\u011f\u0131z\n    userProcessor.removeExistingUser(\"adminUser\");\n\n    \/\/ deleteUser metodunun \"adminUser\" ile ve herhangi bir String (e\u011fer olsayd\u0131) \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frula\n    verify(mockUserService).deleteUser(eq(\"adminUser\")); \/\/ Tek arg\u00fcman oldu\u011fu i\u00e7in eq() gerekli de\u011fil ama g\u00f6sterim ama\u00e7l\u0131\n}\n\n@Test\nvoid shouldCallCreateUserWithArgumentMatcher() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    userProcessor.processNewUser(\"longusername\", \"test@example.com\");\n\n    \/\/ Kullan\u0131c\u0131 ad\u0131n\u0131n 8 karakterden uzun oldu\u011funu do\u011frula\n    verify(mockUserService).createUser(argThat(username -> username.length() > 8), anyString());\n}<\/code><\/pre>\n<p><strong>Pratik Bilgi:<\/strong> Arg\u00fcman e\u015fle\u015ftiriciler kullan\u0131rken dikkatli olmal\u0131s\u0131n\u0131z. E\u011fer bir <code>verify()<\/code> \u00e7a\u011fr\u0131s\u0131nda birden fazla arg\u00fcman varsa ve bunlardan bir tanesi i\u00e7in <code>any()<\/code> veya benzeri bir e\u015fle\u015ftirici kullan\u0131yorsan\u0131z, di\u011fer t\u00fcm arg\u00fcmanlar i\u00e7in de e\u015fle\u015ftirici kullanman\u0131z GEREK\u0130R. Aksi takdirde, <code>InvalidUseOfMatchersException<\/code> hatas\u0131 al\u0131rs\u0131n\u0131z. \u00d6rne\u011fin, <code>verify(mock).method(anyString(), \"fixedValue\");<\/code> hatal\u0131d\u0131r. Do\u011frusu <code>verify(mock).method(anyString(), eq(\"fixedValue\"));<\/code> olmal\u0131d\u0131r.<\/p>\n<h3>Geli\u015fmi\u015f Verify Kullan\u0131mlar\u0131 ve Pratik \u0130pu\u00e7lar\u0131<\/h3>\n<p>Mockito <code>verify()<\/code>&#8216;\u0131n temel ve \u00e7a\u011fr\u0131 say\u0131s\u0131na g\u00f6re kullan\u0131mlar\u0131n\u0131 g\u00f6rd\u00fck. \u015eimdi daha karma\u015f\u0131k senaryolar ve iyi pratikler \u00fczerine odaklanal\u0131m.<\/p>\n<h4>\u00c7a\u011fr\u0131 S\u0131ras\u0131n\u0131 Do\u011frulama (<code>InOrder<\/code>)<\/h4>\n<p>Baz\u0131 durumlarda, bir mock \u00fczerindeki metod \u00e7a\u011fr\u0131lar\u0131n\u0131n sadece ger\u00e7ekle\u015fip ger\u00e7ekle\u015fmedi\u011fi de\u011fil, ayn\u0131 zamanda belirli bir s\u0131rada ger\u00e7ekle\u015fip ger\u00e7ekle\u015fmedi\u011fi de \u00f6nemlidir. <code>InOrder<\/code> s\u0131n\u0131f\u0131 bu ihtiyac\u0131 kar\u015f\u0131lar.<\/p>\n<pre><code class=\"language-java\">import org.mockito.InOrder;\n\n\/\/ ...\ninterface OrderService {\n    void prepareOrder(String orderId);\n    void processPayment(String orderId, double amount);\n    void shipOrder(String orderId);\n}\n\nclass OrderProcessor {\n    private OrderService orderService;\n\n    public OrderProcessor(OrderService orderService) {\n        this.orderService = orderService;\n    }\n\n    public void completeOrderWorkflow(String orderId, double amount) {\n        orderService.prepareOrder(orderId);\n        orderService.processPayment(orderId, amount);\n        orderService.shipOrder(orderId);\n    }\n}\n\npublic class OrderProcessorTest {\n\n    @Test\n    void shouldExecuteOrderStepsInCorrectSequence() {\n        OrderService mockOrderService = mock(OrderService.class);\n        OrderProcessor orderProcessor = new OrderProcessor(mockOrderService);\n\n        orderProcessor.completeOrderWorkflow(\"ORD-001\", 100.0);\n\n        \/\/ \u00c7a\u011fr\u0131 s\u0131ras\u0131n\u0131 do\u011frulamak i\u00e7in InOrder nesnesi olu\u015ftur\n        InOrder inOrder = inOrder(mockOrderService);\n\n        \/\/ Metodlar\u0131n belirtilen s\u0131rada \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 do\u011frula\n        inOrder.verify(mockOrderService).prepareOrder(\"ORD-001\");\n        inOrder.verify(mockOrderService).processPayment(\"ORD-001\", 100.0);\n        inOrder.verify(mockOrderService).shipOrder(\"ORD-001\");\n    }\n}<\/code><\/pre>\n<p><code>InOrder<\/code> ile birden fazla mock nesnesinin \u00e7a\u011fr\u0131 s\u0131ras\u0131n\u0131 da do\u011frulayabilirsiniz: <code>InOrder inOrder = inOrder(mock1, mock2);<\/code><\/p>\n<h4>T\u00fcm Etkile\u015fimleri Do\u011frulama (<code>verifyNoMoreInteractions()<\/code>, <code>verifyZeroInteractions()<\/code>)<\/h4>\n<p>Bazen bir mock nesnesi \u00fczerinde beklenen etkile\u015fimler d\u0131\u015f\u0131nda hi\u00e7bir etkile\u015fim olmamas\u0131n\u0131 sa\u011flamak isteyebilirsiniz.<\/p>\n<p>*   <code>verifyNoMoreInteractions(Object... mocks)<\/code>: Belirtilen mock(lar) \u00fczerinde, bu noktaya kadar do\u011frulanmam\u0131\u015f (unverified) ba\u015fka bir etkile\u015fimin olmad\u0131\u011f\u0131n\u0131 do\u011frular. Genellikle testin sonunda kullan\u0131l\u0131r.<br \/>\n*   <code>verifyZeroInteractions(Object... mocks)<\/code>: Belirtilen mock(lar) \u00fczerinde hi\u00e7bir etkile\u015fimin olmad\u0131\u011f\u0131n\u0131 do\u011frular. <code>verify(mock, never()).someMethod()<\/code> ile t\u00fcm metodlar i\u00e7in tek tek <code>never()<\/code> \u00e7a\u011f\u0131rmaya benzer ama daha k\u0131sad\u0131r.<\/p>\n<pre><code class=\"language-java\">\/\/ ...\n@Test\nvoid shouldNotHaveAnyOtherInteractionsAfterExpectedOnes() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    userProcessor.processNewUser(\"user1\", \"user1@example.com\");\n\n    verify(mockUserService).createUser(\"user1\", \"user1@example.com\");\n\n    \/\/ createUser d\u0131\u015f\u0131nda ba\u015fka hi\u00e7bir metodun \u00e7a\u011fr\u0131lmad\u0131\u011f\u0131n\u0131 do\u011frula\n    verifyNoMoreInteractions(mockUserService);\n}\n\n@Test\nvoid shouldHaveZeroInteractionsForInactiveProcessor() {\n    UserService mockUserService = mock(UserService.class);\n    UserProcessor userProcessor = new UserProcessor(mockUserService);\n\n    \/\/ UserProcessor \u00fczerinde hi\u00e7bir metod \u00e7a\u011f\u0131rmad\u0131k\n\n    \/\/ mockUserService \u00fczerinde hi\u00e7bir etkile\u015fimin olmad\u0131\u011f\u0131n\u0131 do\u011frula\n    verifyZeroInteractions(mockUserService);\n}<\/code><\/pre>\n<p><strong>Pratik Bilgi:<\/strong> <code>verifyNoMoreInteractions()<\/code> dikkatli kullan\u0131lmal\u0131d\u0131r. Baz\u0131 geli\u015ftiriciler bunu her testin sonunda kullanmay\u0131 severken, baz\u0131lar\u0131 bunun testleri \u00e7ok k\u0131r\u0131lgan hale getirdi\u011fini d\u00fc\u015f\u00fcn\u00fcr. Genellikle, test etti\u011finiz bir metodun sadece bekledi\u011finiz ba\u011f\u0131ml\u0131l\u0131klar\u0131 \u00e7a\u011f\u0131rd\u0131\u011f\u0131ndan emin olmak istedi\u011finizde faydal\u0131d\u0131r.<\/p>\n<h4>Do\u011frulama S\u0131f\u0131rlama (<code>reset()<\/code>)<\/h4>\n<p><code>Mockito.reset(mockObject)<\/code> metodu, bir mock nesnesinin t\u00fcm <code>when()<\/code> stubbing&#8217;lerini ve <code>verify()<\/code> \u00e7a\u011fr\u0131 ge\u00e7mi\u015fini temizler. Genellikle testler aras\u0131nda izolasyonu sa\u011flamak i\u00e7in her testte yeni bir mock olu\u015fturmak tercih edildi\u011finden, <code>reset()<\/code> \u00e7ok s\u0131k kullan\u0131lmaz. Ancak, ayn\u0131 mock nesnesini birden fazla test senaryosunda kullanman\u0131z gerekti\u011finde (ki bu genellikle k\u00f6t\u00fc bir test tasar\u0131m\u0131d\u0131r), <code>reset()<\/code> faydal\u0131 olabilir.<\/p>\n<p><strong>Pratik Bilgi:<\/strong> <code>reset()<\/code> kullanmak yerine, her test metodunda <code>@BeforeEach<\/code> ile veya do\u011frudan test metodunun i\u00e7inde yeni mock nesneleri olu\u015fturmak daha temiz ve daha okunabilir testler yazman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>\u0130yi Test Pratikleri<\/h4>\n<p>*   <strong>Tek Sorumluluk Prensibi (Single Responsibility Principle) Testlerde de Ge\u00e7erlidir:<\/strong> Her test metodu sadece bir \u015feyi do\u011frulamal\u0131d\u0131r. \u00c7ok say\u0131da <code>verify()<\/code> \u00e7a\u011fr\u0131s\u0131 i\u00e7eren testler genellikle birden fazla senaryoyu veya davran\u0131\u015f\u0131 test etmeye \u00e7al\u0131\u015f\u0131yordur.<br \/>\n*   <strong>Davran\u0131\u015f\u0131 Do\u011frula, \u0130\u00e7 Detaylar\u0131 De\u011fil:<\/strong> <code>verify()<\/code>&#8216;\u0131, test etti\u011finiz birimin d\u0131\u015f ba\u011f\u0131ml\u0131l\u0131klar\u0131yla nas\u0131l etkile\u015fime girdi\u011fini do\u011frulamak i\u00e7in kullan\u0131n, i\u00e7sel implementasyon detaylar\u0131n\u0131 de\u011fil. A\u015f\u0131r\u0131 spesifik <code>verify()<\/code> \u00e7a\u011fr\u0131lar\u0131, kod refakt\u00f6r edildi\u011finde testlerin gereksiz yere k\u0131r\u0131lmas\u0131na neden olabilir.<br \/>\n*   <strong>Over-specification&#8217;dan Ka\u00e7\u0131n:<\/strong> Her <code>verify()<\/code> \u00e7a\u011fr\u0131s\u0131, testin k\u0131r\u0131lma olas\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. Yaln\u0131zca kritik etkile\u015fimleri do\u011frulay\u0131n.<br \/>\n*   <strong>BDD Tarz\u0131 Testler \u0130\u00e7in <code>then()<\/code>:<\/strong> E\u011fer BDD (Behavior-Driven Development) tarz\u0131 testler yaz\u0131yorsan\u0131z, Mockito&#8217;nun <code>BDDMockito<\/code> s\u0131n\u0131f\u0131ndaki <code>then()<\/code> metodunu kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. <code>then(mock).should(times(1)).method();<\/code> s\u00f6z dizimi, <code>verify(mock, times(1)).method();<\/code> ile ayn\u0131 i\u015flevi g\u00f6r\u00fcr ancak daha \u00e7ok &#8220;davran\u0131\u015f&#8221; vurgusu yapar.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><code>Mockito.verify()<\/code> metodu, birim testlerinizi daha g\u00fcvenilir ve anlaml\u0131 hale getiren vazge\u00e7ilmez bir ara\u00e7t\u0131r. Bir s\u0131n\u0131f\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131yla do\u011fru \u015fekilde etkile\u015fime girdi\u011finden emin olarak, kodunuzun kalitesini art\u0131r\u0131r ve beklenmedik hatalar\u0131 erken a\u015famada yakalaman\u0131za yard\u0131mc\u0131 olur. Do\u011fru arg\u00fcmanlarla, do\u011fru say\u0131da ve hatta do\u011fru s\u0131rada \u00e7a\u011fr\u0131lar\u0131 do\u011frulayarak, yaz\u0131l\u0131m\u0131n\u0131z\u0131n davran\u0131\u015fsal do\u011frulu\u011funu garanti alt\u0131na alabilirsiniz.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<p><strong>S1: <code>verify()<\/code> ile <code>when()<\/code> aras\u0131ndaki fark nedir?<\/strong><br \/>\n<strong>C1:<\/strong> <code>when()<\/code> (veya <code>doReturn().when()<\/code>), bir mock nesnesi \u00fczerindeki bir metodun \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda ne yapaca\u011f\u0131n\u0131 (hangi de\u011feri d\u00f6nd\u00fcrece\u011fini veya hangi exception&#8217;\u0131 f\u0131rlataca\u011f\u0131n\u0131) belirtmek i\u00e7in kullan\u0131l\u0131r. Bu, &#8220;stubbing&#8221; olarak adland\u0131r\u0131l\u0131r. <code>verify()<\/code> ise, bir mock nesnesi \u00fczerindeki bir metodun ger\u00e7ekten \u00e7a\u011fr\u0131l\u0131p \u00e7a\u011fr\u0131lmad\u0131\u011f\u0131n\u0131, ka\u00e7 kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 ve hangi arg\u00fcmanlarla \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in kullan\u0131l\u0131r. <code>when()<\/code> bir davran\u0131\u015f tan\u0131mlarken, <code>verify()<\/code> bir davran\u0131\u015f\u0131 do\u011frular.<\/p>\n<p><strong>S2: <code>verify()<\/code> kullanmak ne zaman gereklidir?<\/strong><br \/>\n<strong>C2:<\/strong> <code>verify()<\/code> genellikle SUT&#8217;un bir ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 \u00fczerinde bir &#8220;yan etki&#8221; (side effect) yaratmas\u0131n\u0131 bekledi\u011finizde gereklidir. \u00d6rne\u011fin, bir veritaban\u0131na kay\u0131t yazma, bir e-posta g\u00f6nderme, bir olay yay\u0131nlama veya bir dosya sistemiyle etkile\u015fim kurma gibi i\u015flemler. Bu t\u00fcr i\u015flemlerin sonucunu do\u011frudan SUT&#8217;un d\u00f6n\u00fc\u015f de\u011feriyle g\u00f6zlemleyemedi\u011finiz durumlarda, <code>verify()<\/code> kullanarak bu etkile\u015fimlerin ger\u00e7ekle\u015fti\u011finden emin olursunuz.<\/p>\n<p><strong>S3: <code>verifyNoMoreInteractions()<\/code> her zaman kullan\u0131lmal\u0131 m\u0131?<\/strong><br \/>\n<strong>C3:<\/strong> Hay\u0131r, her zaman kullan\u0131lmak zorunda de\u011fildir ve baz\u0131 durumlarda testleri gereksiz yere k\u0131r\u0131lgan hale getirebilir. <code>verifyNoMoreInteractions()<\/code>&#8216;\u0131, test etti\u011finiz metodun sadece bekledi\u011finiz ba\u011f\u0131ml\u0131l\u0131klar\u0131 \u00e7a\u011f\u0131rd\u0131\u011f\u0131ndan ve ba\u015fka hi\u00e7bir &#8220;gereksiz&#8221; \u00e7a\u011fr\u0131 yapmad\u0131\u011f\u0131ndan emin olmak istedi\u011finizde kullanmal\u0131s\u0131n\u0131z. A\u015f\u0131r\u0131ya ka\u00e7mak, test kodunuzu refakt\u00f6r etmeyi zorla\u015ft\u0131rabilir.<\/p>\n<p><strong>S4: Neden <code>Mockito.verify()<\/code> ba\u015far\u0131s\u0131z oluyor? (Yayg\u0131n hatalar)<\/strong><br \/>\n<strong>C4:<\/strong><br \/>\n*   <strong>Metod hi\u00e7 \u00e7a\u011fr\u0131lmad\u0131:<\/strong> En yayg\u0131n neden. SUT&#8217;taki i\u015f mant\u0131\u011f\u0131, bekledi\u011finiz metodu \u00e7a\u011f\u0131rm\u0131yor.<br \/>\n*   <strong>Farkl\u0131 arg\u00fcmanlarla \u00e7a\u011fr\u0131ld\u0131:<\/strong> Metod \u00e7a\u011fr\u0131ld\u0131 ama bekledi\u011finiz arg\u00fcmanlarla de\u011fil. Arg\u00fcman e\u015fle\u015ftiricileri do\u011fru kulland\u0131\u011f\u0131n\u0131zdan emin olun.<br \/>\n*   <strong>Yanl\u0131\u015f \u00e7a\u011fr\u0131 say\u0131s\u0131:<\/strong> <code>times(1)<\/code> beklerken metod 0 veya 2 kez \u00e7a\u011fr\u0131ld\u0131.<br \/>\n*   <strong>Arg\u00fcman e\u015fle\u015ftirici kurallar\u0131 ihlali:<\/strong> Bir <code>verify()<\/code> \u00e7a\u011fr\u0131s\u0131nda hem sabit de\u011ferler hem de <code>anyString()<\/code> gibi e\u015fle\u015ftiriciler kar\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda olu\u015fur (t\u00fcm arg\u00fcmanlar i\u00e7in e\u015fle\u015ftirici kullan\u0131lmal\u0131).<br \/>\n*   <strong>Yanl\u0131\u015f mock nesnesi:<\/strong> <code>verify()<\/code> \u00e7a\u011fr\u0131s\u0131nda yanl\u0131\u015f mock nesnesini kullanmak.<\/p>\n<p><strong>S5: <code>ArgumentMatchers<\/code> kullan\u0131rken nelere dikkat etmeliyim?<\/strong><br \/>\n<strong>C5:<\/strong><br \/>\n*   Bir <code>verify<\/code> (veya <code>when<\/code>) \u00e7a\u011fr\u0131s\u0131nda bir <code>ArgumentMatcher<\/code> kullan\u0131yorsan\u0131z, o \u00e7a\u011fr\u0131daki T\u00dcM arg\u00fcmanlar i\u00e7in bir e\u015fle\u015ftirici kullanman\u0131z gerekir.<br \/>\n*   <code>eq()<\/code> e\u015fle\u015ftiricisi, sabit bir de\u011feri belirtmek i\u00e7in kullan\u0131l\u0131r ve di\u011fer e\u015fle\u015ftiricilerle kar\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda \u00e7ok kullan\u0131\u015fl\u0131d\u0131r: <code>verify(mock).method(anyString(), eq(\"fixedValue\"));<\/code><br \/>\n*   \u00d6zel e\u015fle\u015fme mant\u0131\u011f\u0131 i\u00e7in <code>argThat()<\/code> kullan\u0131n.<br \/>\n*   <code>any()<\/code> yerine daha spesifik olan <code>anyString()<\/code>, <code>anyInt()<\/code> gibi e\u015fle\u015ftiricileri tercih etmek, tip g\u00fcvenli\u011fini art\u0131r\u0131r ve daha net bir ifade sa\u011flar.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Mockito Verify: Detayl\u0131 Bir Teknik Rehber\nYaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde, \u00f6zellikle birim testleri (unit tests) yazarken, kodumuzun beklene","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-37730","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 Verify: Detayl\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli 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:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mockito Verify: Detayl\u0131 Bir Teknik Rehber\" \/>\n<meta property=\"og:description\" content=\"Mockito Verify: Detayl\u0131 Bir Teknik Rehber Yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde, \u00f6zellikle birim testleri (unit tests) yazarken, kodumuzun beklene\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-13T15:41:38+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=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Mockito Verify: Detayl\u0131 Bir Teknik Rehber\",\"datePublished\":\"2026-01-13T15:41:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/\"},\"wordCount\":1795,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/\",\"name\":\"Mockito Verify: Detayl\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-13T15:41:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mockito Verify: Detayl\u0131 Bir Teknik Rehber\"}]},{\"@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 Verify: Detayl\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli 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:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Mockito Verify: Detayl\u0131 Bir Teknik Rehber","og_description":"Mockito Verify: Detayl\u0131 Bir Teknik Rehber Yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde, \u00f6zellikle birim testleri (unit tests) yazarken, kodumuzun beklene","og_url":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-13T15:41:38+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Mockito Verify: Detayl\u0131 Bir Teknik Rehber","datePublished":"2026-01-13T15:41:38+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/"},"wordCount":1795,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/","name":"Mockito Verify: Detayl\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-13T15:41:38+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/mockito-verify-detayli-bir-teknik-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Mockito Verify: Detayl\u0131 Bir Teknik Rehber"}]},{"@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\/37730","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=37730"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37730\/revisions"}],"predecessor-version":[{"id":37731,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37730\/revisions\/37731"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}