NoAMockException while Mockito.verify(Object,VerificationMode.atleast(2))












5















I am using mockito for mock the unit test cases and am getting the following exception



org.mockito.exceptions.misusing.NotAMockException: 
Argument passed to verify() is of type ConsumerImpl and is not a mock!
Make sure you place the parenthesis correctly!
See the examples of correct verifications:
verify(mock).someMethod();
verify(mock, times(10)).someMethod();
verify(mock, atLeastOnce()).someMetenter code herehod();


and my code is



 MessageConsumer mConsumer = Mockito.mock(MessageConsumer.class);
String data = "new Message for Testing";
Message message = new Message(data.getBytes());
Mockito.when(mConsumer.next(10, TimeUnit.SECONDS)).thenReturn(message);
StringParserTest parserTest = new StringParserTest();
ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


Please some one help me to solve this problem



Thanks in Advance



SRN










share|improve this question





























    5















    I am using mockito for mock the unit test cases and am getting the following exception



    org.mockito.exceptions.misusing.NotAMockException: 
    Argument passed to verify() is of type ConsumerImpl and is not a mock!
    Make sure you place the parenthesis correctly!
    See the examples of correct verifications:
    verify(mock).someMethod();
    verify(mock, times(10)).someMethod();
    verify(mock, atLeastOnce()).someMetenter code herehod();


    and my code is



     MessageConsumer mConsumer = Mockito.mock(MessageConsumer.class);
    String data = "new Message for Testing";
    Message message = new Message(data.getBytes());
    Mockito.when(mConsumer.next(10, TimeUnit.SECONDS)).thenReturn(message);
    StringParserTest parserTest = new StringParserTest();
    ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
    String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


    Please some one help me to solve this problem



    Thanks in Advance



    SRN










    share|improve this question



























      5












      5








      5


      1






      I am using mockito for mock the unit test cases and am getting the following exception



      org.mockito.exceptions.misusing.NotAMockException: 
      Argument passed to verify() is of type ConsumerImpl and is not a mock!
      Make sure you place the parenthesis correctly!
      See the examples of correct verifications:
      verify(mock).someMethod();
      verify(mock, times(10)).someMethod();
      verify(mock, atLeastOnce()).someMetenter code herehod();


      and my code is



       MessageConsumer mConsumer = Mockito.mock(MessageConsumer.class);
      String data = "new Message for Testing";
      Message message = new Message(data.getBytes());
      Mockito.when(mConsumer.next(10, TimeUnit.SECONDS)).thenReturn(message);
      StringParserTest parserTest = new StringParserTest();
      ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
      String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


      Please some one help me to solve this problem



      Thanks in Advance



      SRN










      share|improve this question
















      I am using mockito for mock the unit test cases and am getting the following exception



      org.mockito.exceptions.misusing.NotAMockException: 
      Argument passed to verify() is of type ConsumerImpl and is not a mock!
      Make sure you place the parenthesis correctly!
      See the examples of correct verifications:
      verify(mock).someMethod();
      verify(mock, times(10)).someMethod();
      verify(mock, atLeastOnce()).someMetenter code herehod();


      and my code is



       MessageConsumer mConsumer = Mockito.mock(MessageConsumer.class);
      String data = "new Message for Testing";
      Message message = new Message(data.getBytes());
      Mockito.when(mConsumer.next(10, TimeUnit.SECONDS)).thenReturn(message);
      StringParserTest parserTest = new StringParserTest();
      ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
      String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


      Please some one help me to solve this problem



      Thanks in Advance



      SRN







      java testng mockito junit-ee






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited May 29 '13 at 16:57









      Brice

      24.4k36782




      24.4k36782










      asked May 29 '13 at 16:02









      RameshRamesh

      26112




      26112
























          2 Answers
          2






          active

          oldest

          votes


















          4














          Well, that's exactly what mockito says, you are not passing a mock to verify !



          ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
          String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


          Plus if you verified a mock why would you want to store the result of the invocation you verify, it wouldn't make sense since the consumer is mocked. Verify is to verify calls on mocked objects that are the collaborators of your unit tested object. Which in your case is not really clear.



          Also you never use your mock mConsumer instance.



          You should definitely separate your test in 3 phase, one for the fixture, one for the action, and one for the verifications. Use the BDD terminology to achieve that, it augments understanding and readability for the tester and future reader of this code (And Mockito offers them in the API through BDDMockito).



          As I don't really get what the code is trying to test from the code you gave, I'll be imagining things. So for example you'll write this kind of code (using import static) :



          // given a consumer
          MessageConsumer message_consumer = mock(MessageConsumer.class);
          String the_message_data = "new Message for Testing";
          given(message_consumer.next(10, SECONDS)).willReturn(new Message(the_message_data.getBytes()));

          // when calling the client of the customer (which is the unit that is tested)
          new MessageProcessor(message_consumer).processAll();

          // then verify that consumeMessage is called 3 times
          verify(message_consumer, times(3)).consumeMessage(10, SECONDS);


          Remember Mockito helps you focus on interactions between objects — as it's the most important notion of object oriented programming — and especially between the tested one and his collaborators that will certainly be mocked.






          share|improve this answer

































            1














            Usually we mock using @InjectMock and we try to verify a method called from inside the test case method.
            Here is one scenario which generally give issue.



            public class A{
            @Autowired
            Service s

            public void method1(){
            m2();
            }
            public void method2(){
            s.someMethod();
            }
            }

            public class ATest{

            @InjectMocks
            A a;

            public void testM1(){
            a.method1();
            Mockito.verify(a, Mockito.times(1)).method2();

            }
            }


            This will always give "NoAMockException while Mockito.verify"
            instead of that we should use following verification.



            public class ATest{
            @InjectMocks
            A a;
            @Mock
            Service s

            public void testM1(){
            a.method1();
            Mockito.verify(s, Mockito.times(1)).someMethod();
            }
            }


            Or if we want to verify() method2()
            then we have to @Mock class A instead of @InjectMock






            share|improve this answer

























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f16818772%2fnoamockexception-while-mockito-verifyobject-verificationmode-atleast2%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              4














              Well, that's exactly what mockito says, you are not passing a mock to verify !



              ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
              String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


              Plus if you verified a mock why would you want to store the result of the invocation you verify, it wouldn't make sense since the consumer is mocked. Verify is to verify calls on mocked objects that are the collaborators of your unit tested object. Which in your case is not really clear.



              Also you never use your mock mConsumer instance.



              You should definitely separate your test in 3 phase, one for the fixture, one for the action, and one for the verifications. Use the BDD terminology to achieve that, it augments understanding and readability for the tester and future reader of this code (And Mockito offers them in the API through BDDMockito).



              As I don't really get what the code is trying to test from the code you gave, I'll be imagining things. So for example you'll write this kind of code (using import static) :



              // given a consumer
              MessageConsumer message_consumer = mock(MessageConsumer.class);
              String the_message_data = "new Message for Testing";
              given(message_consumer.next(10, SECONDS)).willReturn(new Message(the_message_data.getBytes()));

              // when calling the client of the customer (which is the unit that is tested)
              new MessageProcessor(message_consumer).processAll();

              // then verify that consumeMessage is called 3 times
              verify(message_consumer, times(3)).consumeMessage(10, SECONDS);


              Remember Mockito helps you focus on interactions between objects — as it's the most important notion of object oriented programming — and especially between the tested one and his collaborators that will certainly be mocked.






              share|improve this answer






























                4














                Well, that's exactly what mockito says, you are not passing a mock to verify !



                ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
                String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


                Plus if you verified a mock why would you want to store the result of the invocation you verify, it wouldn't make sense since the consumer is mocked. Verify is to verify calls on mocked objects that are the collaborators of your unit tested object. Which in your case is not really clear.



                Also you never use your mock mConsumer instance.



                You should definitely separate your test in 3 phase, one for the fixture, one for the action, and one for the verifications. Use the BDD terminology to achieve that, it augments understanding and readability for the tester and future reader of this code (And Mockito offers them in the API through BDDMockito).



                As I don't really get what the code is trying to test from the code you gave, I'll be imagining things. So for example you'll write this kind of code (using import static) :



                // given a consumer
                MessageConsumer message_consumer = mock(MessageConsumer.class);
                String the_message_data = "new Message for Testing";
                given(message_consumer.next(10, SECONDS)).willReturn(new Message(the_message_data.getBytes()));

                // when calling the client of the customer (which is the unit that is tested)
                new MessageProcessor(message_consumer).processAll();

                // then verify that consumeMessage is called 3 times
                verify(message_consumer, times(3)).consumeMessage(10, SECONDS);


                Remember Mockito helps you focus on interactions between objects — as it's the most important notion of object oriented programming — and especially between the tested one and his collaborators that will certainly be mocked.






                share|improve this answer




























                  4












                  4








                  4







                  Well, that's exactly what mockito says, you are not passing a mock to verify !



                  ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
                  String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


                  Plus if you verified a mock why would you want to store the result of the invocation you verify, it wouldn't make sense since the consumer is mocked. Verify is to verify calls on mocked objects that are the collaborators of your unit tested object. Which in your case is not really clear.



                  Also you never use your mock mConsumer instance.



                  You should definitely separate your test in 3 phase, one for the fixture, one for the action, and one for the verifications. Use the BDD terminology to achieve that, it augments understanding and readability for the tester and future reader of this code (And Mockito offers them in the API through BDDMockito).



                  As I don't really get what the code is trying to test from the code you gave, I'll be imagining things. So for example you'll write this kind of code (using import static) :



                  // given a consumer
                  MessageConsumer message_consumer = mock(MessageConsumer.class);
                  String the_message_data = "new Message for Testing";
                  given(message_consumer.next(10, SECONDS)).willReturn(new Message(the_message_data.getBytes()));

                  // when calling the client of the customer (which is the unit that is tested)
                  new MessageProcessor(message_consumer).processAll();

                  // then verify that consumeMessage is called 3 times
                  verify(message_consumer, times(3)).consumeMessage(10, SECONDS);


                  Remember Mockito helps you focus on interactions between objects — as it's the most important notion of object oriented programming — and especially between the tested one and his collaborators that will certainly be mocked.






                  share|improve this answer















                  Well, that's exactly what mockito says, you are not passing a mock to verify !



                  ConsumerImpl<String> consumer = new ConsumerImpl<String>(mConsumer, parserTest);
                  String mes=Mockito.verify(consumer,VerificationModeFactory.times(3)).consumeMessage(10,TimeUnit.SECONDS);


                  Plus if you verified a mock why would you want to store the result of the invocation you verify, it wouldn't make sense since the consumer is mocked. Verify is to verify calls on mocked objects that are the collaborators of your unit tested object. Which in your case is not really clear.



                  Also you never use your mock mConsumer instance.



                  You should definitely separate your test in 3 phase, one for the fixture, one for the action, and one for the verifications. Use the BDD terminology to achieve that, it augments understanding and readability for the tester and future reader of this code (And Mockito offers them in the API through BDDMockito).



                  As I don't really get what the code is trying to test from the code you gave, I'll be imagining things. So for example you'll write this kind of code (using import static) :



                  // given a consumer
                  MessageConsumer message_consumer = mock(MessageConsumer.class);
                  String the_message_data = "new Message for Testing";
                  given(message_consumer.next(10, SECONDS)).willReturn(new Message(the_message_data.getBytes()));

                  // when calling the client of the customer (which is the unit that is tested)
                  new MessageProcessor(message_consumer).processAll();

                  // then verify that consumeMessage is called 3 times
                  verify(message_consumer, times(3)).consumeMessage(10, SECONDS);


                  Remember Mockito helps you focus on interactions between objects — as it's the most important notion of object oriented programming — and especially between the tested one and his collaborators that will certainly be mocked.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Jan 9 '15 at 20:25

























                  answered May 29 '13 at 16:56









                  BriceBrice

                  24.4k36782




                  24.4k36782

























                      1














                      Usually we mock using @InjectMock and we try to verify a method called from inside the test case method.
                      Here is one scenario which generally give issue.



                      public class A{
                      @Autowired
                      Service s

                      public void method1(){
                      m2();
                      }
                      public void method2(){
                      s.someMethod();
                      }
                      }

                      public class ATest{

                      @InjectMocks
                      A a;

                      public void testM1(){
                      a.method1();
                      Mockito.verify(a, Mockito.times(1)).method2();

                      }
                      }


                      This will always give "NoAMockException while Mockito.verify"
                      instead of that we should use following verification.



                      public class ATest{
                      @InjectMocks
                      A a;
                      @Mock
                      Service s

                      public void testM1(){
                      a.method1();
                      Mockito.verify(s, Mockito.times(1)).someMethod();
                      }
                      }


                      Or if we want to verify() method2()
                      then we have to @Mock class A instead of @InjectMock






                      share|improve this answer






























                        1














                        Usually we mock using @InjectMock and we try to verify a method called from inside the test case method.
                        Here is one scenario which generally give issue.



                        public class A{
                        @Autowired
                        Service s

                        public void method1(){
                        m2();
                        }
                        public void method2(){
                        s.someMethod();
                        }
                        }

                        public class ATest{

                        @InjectMocks
                        A a;

                        public void testM1(){
                        a.method1();
                        Mockito.verify(a, Mockito.times(1)).method2();

                        }
                        }


                        This will always give "NoAMockException while Mockito.verify"
                        instead of that we should use following verification.



                        public class ATest{
                        @InjectMocks
                        A a;
                        @Mock
                        Service s

                        public void testM1(){
                        a.method1();
                        Mockito.verify(s, Mockito.times(1)).someMethod();
                        }
                        }


                        Or if we want to verify() method2()
                        then we have to @Mock class A instead of @InjectMock






                        share|improve this answer




























                          1












                          1








                          1







                          Usually we mock using @InjectMock and we try to verify a method called from inside the test case method.
                          Here is one scenario which generally give issue.



                          public class A{
                          @Autowired
                          Service s

                          public void method1(){
                          m2();
                          }
                          public void method2(){
                          s.someMethod();
                          }
                          }

                          public class ATest{

                          @InjectMocks
                          A a;

                          public void testM1(){
                          a.method1();
                          Mockito.verify(a, Mockito.times(1)).method2();

                          }
                          }


                          This will always give "NoAMockException while Mockito.verify"
                          instead of that we should use following verification.



                          public class ATest{
                          @InjectMocks
                          A a;
                          @Mock
                          Service s

                          public void testM1(){
                          a.method1();
                          Mockito.verify(s, Mockito.times(1)).someMethod();
                          }
                          }


                          Or if we want to verify() method2()
                          then we have to @Mock class A instead of @InjectMock






                          share|improve this answer















                          Usually we mock using @InjectMock and we try to verify a method called from inside the test case method.
                          Here is one scenario which generally give issue.



                          public class A{
                          @Autowired
                          Service s

                          public void method1(){
                          m2();
                          }
                          public void method2(){
                          s.someMethod();
                          }
                          }

                          public class ATest{

                          @InjectMocks
                          A a;

                          public void testM1(){
                          a.method1();
                          Mockito.verify(a, Mockito.times(1)).method2();

                          }
                          }


                          This will always give "NoAMockException while Mockito.verify"
                          instead of that we should use following verification.



                          public class ATest{
                          @InjectMocks
                          A a;
                          @Mock
                          Service s

                          public void testM1(){
                          a.method1();
                          Mockito.verify(s, Mockito.times(1)).someMethod();
                          }
                          }


                          Or if we want to verify() method2()
                          then we have to @Mock class A instead of @InjectMock







                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited Jan 2 at 23:35

























                          answered Jan 13 '16 at 23:13









                          Sumit SundriyalSumit Sundriyal

                          2371411




                          2371411






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f16818772%2fnoamockexception-while-mockito-verifyobject-verificationmode-atleast2%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Mossoró

                              Error while reading .h5 file using the rhdf5 package in R

                              Pushsharp Apns notification error: 'InvalidToken'