{"id":4401,"date":"2021-07-03T08:11:12","date_gmt":"2021-07-03T08:11:12","guid":{"rendered":"https:\/\/codethataint.com\/blog\/?p=4401"},"modified":"2021-07-03T10:34:34","modified_gmt":"2021-07-03T10:34:34","slug":"when-to-use-spy-and-mock","status":"publish","type":"post","link":"https:\/\/codethataint.com\/blog\/when-to-use-spy-and-mock\/","title":{"rendered":"When to Use Spy and Mock?"},"content":{"rendered":"<p>Below we have class &#8211; ClassA which contains the actual method &#8211; MethodA to be tested. MethodA has call to two dependent<br \/>\n<strong>ClassA.java<\/strong> <\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage com.mugil.org;\r\n\r\npublic class ClassA {\r\n    public ClassADep1 dependency1;\r\n    public ClassADep2 dependency2;\r\n\r\n    public ClassA(ClassADep1 dependency1, ClassADep2 dependency2) {\r\n        this.dependency1 = dependency1;\r\n        this.dependency2 = dependency2;\r\n    }\r\n\r\n    public boolean MethodA(){\r\n        System.out.println(&quot;I am going to call Dep1Method&quot;);\r\n        dependency1.Dep1Method();\r\n\r\n        System.out.println(&quot;I am going to call Dep2Method&quot;);\r\n        dependency2.Dep2Method();\r\n\r\n        return true;\r\n    }\r\n}\r\n<\/pre>\n<p><strong>ClassADep1.java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage com.mugil.org;\r\n\r\npublic class ClassADep1 {\r\n    public void Dep1Method(){\r\n        System.out.println(&quot;This is ClassADep1 Method getting called&quot;);\r\n    }\r\n}\r\n<\/pre>\n<p><strong>ClassADep2.java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage com.mugil.org;\r\n\r\npublic class ClassADep2 {\r\n    public void Dep2Method(){\r\n        System.out.println(&quot;This is ClassADep2 Method getting called&quot;);\r\n    }\r\n}\r\n<\/pre>\n<p>Use @Mock when you want to just test the functionality externally without actually calling that method.If you want to be safe and avoid calling external services and just want to test the logic inside of the unit, then use mock.<\/p>\n<p><strong class=\"ctaHeader3\">Using @Mock annotation for Dependency<\/strong><br \/>\n<strong>ClassATest.java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage com.mugil.org;\r\n\r\nimport org.junit.jupiter.api.Test;\r\nimport org.junit.jupiter.api.extension.ExtendWith;\r\nimport org.mockito.InjectMocks;\r\nimport org.mockito.Mock;\r\nimport org.mockito.junit.jupiter.MockitoExtension;\r\n\r\nimport static org.junit.jupiter.api.Assertions.*;\r\n\r\n@ExtendWith({MockitoExtension.class})\r\nclass ClassATest {\r\n    @InjectMocks\r\n    ClassA classA;\r\n\r\n    @Mock\r\n    ClassADep1 dependency1;\r\n\r\n    @Mock\r\n    ClassADep2 dependency2;\r\n\r\n    @Test\r\n    void methodA() {\r\n        assertEquals(true, classA.MethodA());\r\n    }\r\n}\r\n<\/pre>\n<p><strong>Output<\/strong><\/p>\n<pre>\r\nI am going to call Dep1Method\r\nI am going to call Dep2Method\r\n<\/pre>\n<p>Use @Spy when you want to test the functionality externally + internally with the very method being called. If you want to call an external service and perform calling of real dependencies, or simply say, you want to run the program as it is and just stub specific methods, then use spy.<\/p>\n<p><strong class=\"ctaHeader3\">Using @Spy annotation for Dependency<\/strong><br \/>\n<strong>ClassATest.java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage com.mugil.org;\r\n\r\nimport org.junit.jupiter.api.Test;\r\nimport org.junit.jupiter.api.extension.ExtendWith;\r\nimport org.mockito.InjectMocks;\r\nimport org.mockito.Spy;\r\nimport org.mockito.junit.jupiter.MockitoExtension;\r\n\r\nimport static org.junit.jupiter.api.Assertions.assertEquals;\r\n\r\n@ExtendWith({MockitoExtension.class})\r\nclass ClassATest {\r\n    @InjectMocks\r\n    ClassA classA;\r\n\r\n    @Spy\r\n    ClassADep1 dependency1;\r\n\r\n    @Spy\r\n    ClassADep2 dependency2;\r\n\r\n    @Test\r\n    void methodA() {\r\n        assertEquals(true, classA.MethodA());\r\n    }\r\n}\r\n<\/pre>\n<p><strong>Output<\/strong><\/p>\n<pre>\r\nI am going to call Dep1Method\r\nThis is ClassADep1 Method getting called\r\nI am going to call Dep2Method\r\nThis is ClassADep2 Method getting called\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Below we have class &#8211; ClassA which contains the actual method &#8211; MethodA to be tested. MethodA has call to two dependent ClassA.java package com.mugil.org; public class ClassA { public ClassADep1 dependency1; public ClassADep2 dependency2; public ClassA(ClassADep1 dependency1, ClassADep2 dependency2) { this.dependency1 = dependency1; this.dependency2 = dependency2; } public boolean MethodA(){ System.out.println(&quot;I am going to&hellip; <a href=\"https:\/\/codethataint.com\/blog\/when-to-use-spy-and-mock\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[332],"tags":[],"class_list":["post-4401","post","type-post","status-publish","format-standard","hentry","category-interview-mockito"],"_links":{"self":[{"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/posts\/4401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/comments?post=4401"}],"version-history":[{"count":5,"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/posts\/4401\/revisions"}],"predecessor-version":[{"id":4412,"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/posts\/4401\/revisions\/4412"}],"wp:attachment":[{"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/media?parent=4401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/categories?post=4401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codethataint.com\/blog\/wp-json\/wp\/v2\/tags?post=4401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}