How to get hold of fields of object under test using spring and mockito












1















I have a spring service class where I am submitting few tasks to Executor under @PostConstruct method. I have written few tests but their behavior is not same in all runs. Some times all pass, sometime few fails though condition is satisfied.



Class A {

Private final ExecutorService executorService = Executors.newCachedThreadPool();

private final Object obj1
private final Object obj2;

@Autowired
public A(Object obj1, Object obj2) {
this.obj1 = obj1;
this.obj2 = obj2;
}

@PostConstruct
public void process() {
executorService.submit(() -> {
obj1.doSomething();
obj2.doOtherthing();
});

}

//Some other methods.....

}


Class ATest {

A a;

@Mock
Object obj1;

@Mock
Object obj2;

@Before
public void setUp() {
a = new A(Obj1, Obj2);
}

@Test
public void processTest {

doNothing.when(obj1.doSomething);
doNothing.when(obj1.doOtherthing);
a.process();
verify(obj1).doSomething();
verify(obj2).doOtherthing();

}

@Test
public void otherTest {

//some test

}

}


So I want to have access of executorService in test class so that I can monitor what is happening why tests are behaving differently.



Any suggestion or recommendation would be helpful.










share|improve this question



























    1















    I have a spring service class where I am submitting few tasks to Executor under @PostConstruct method. I have written few tests but their behavior is not same in all runs. Some times all pass, sometime few fails though condition is satisfied.



    Class A {

    Private final ExecutorService executorService = Executors.newCachedThreadPool();

    private final Object obj1
    private final Object obj2;

    @Autowired
    public A(Object obj1, Object obj2) {
    this.obj1 = obj1;
    this.obj2 = obj2;
    }

    @PostConstruct
    public void process() {
    executorService.submit(() -> {
    obj1.doSomething();
    obj2.doOtherthing();
    });

    }

    //Some other methods.....

    }


    Class ATest {

    A a;

    @Mock
    Object obj1;

    @Mock
    Object obj2;

    @Before
    public void setUp() {
    a = new A(Obj1, Obj2);
    }

    @Test
    public void processTest {

    doNothing.when(obj1.doSomething);
    doNothing.when(obj1.doOtherthing);
    a.process();
    verify(obj1).doSomething();
    verify(obj2).doOtherthing();

    }

    @Test
    public void otherTest {

    //some test

    }

    }


    So I want to have access of executorService in test class so that I can monitor what is happening why tests are behaving differently.



    Any suggestion or recommendation would be helpful.










    share|improve this question

























      1












      1








      1








      I have a spring service class where I am submitting few tasks to Executor under @PostConstruct method. I have written few tests but their behavior is not same in all runs. Some times all pass, sometime few fails though condition is satisfied.



      Class A {

      Private final ExecutorService executorService = Executors.newCachedThreadPool();

      private final Object obj1
      private final Object obj2;

      @Autowired
      public A(Object obj1, Object obj2) {
      this.obj1 = obj1;
      this.obj2 = obj2;
      }

      @PostConstruct
      public void process() {
      executorService.submit(() -> {
      obj1.doSomething();
      obj2.doOtherthing();
      });

      }

      //Some other methods.....

      }


      Class ATest {

      A a;

      @Mock
      Object obj1;

      @Mock
      Object obj2;

      @Before
      public void setUp() {
      a = new A(Obj1, Obj2);
      }

      @Test
      public void processTest {

      doNothing.when(obj1.doSomething);
      doNothing.when(obj1.doOtherthing);
      a.process();
      verify(obj1).doSomething();
      verify(obj2).doOtherthing();

      }

      @Test
      public void otherTest {

      //some test

      }

      }


      So I want to have access of executorService in test class so that I can monitor what is happening why tests are behaving differently.



      Any suggestion or recommendation would be helpful.










      share|improve this question














      I have a spring service class where I am submitting few tasks to Executor under @PostConstruct method. I have written few tests but their behavior is not same in all runs. Some times all pass, sometime few fails though condition is satisfied.



      Class A {

      Private final ExecutorService executorService = Executors.newCachedThreadPool();

      private final Object obj1
      private final Object obj2;

      @Autowired
      public A(Object obj1, Object obj2) {
      this.obj1 = obj1;
      this.obj2 = obj2;
      }

      @PostConstruct
      public void process() {
      executorService.submit(() -> {
      obj1.doSomething();
      obj2.doOtherthing();
      });

      }

      //Some other methods.....

      }


      Class ATest {

      A a;

      @Mock
      Object obj1;

      @Mock
      Object obj2;

      @Before
      public void setUp() {
      a = new A(Obj1, Obj2);
      }

      @Test
      public void processTest {

      doNothing.when(obj1.doSomething);
      doNothing.when(obj1.doOtherthing);
      a.process();
      verify(obj1).doSomething();
      verify(obj2).doOtherthing();

      }

      @Test
      public void otherTest {

      //some test

      }

      }


      So I want to have access of executorService in test class so that I can monitor what is happening why tests are behaving differently.



      Any suggestion or recommendation would be helpful.







      java spring junit mockito






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 30 '18 at 13:40









      PriyeshPriyesh

      62




      62
























          1 Answer
          1






          active

          oldest

          votes


















          0














          You could create a package private method for your executorService, and use it in test to get executorService, however your test class and class under test should be in the same package.



          ExecutorService getExecutorService() {
          return executorService;
          }


          Besides this you could make use of @InjectMocks annotation instead @Before setUp().



          @InjectMocks
          private A a;





          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%2f53978095%2fhow-to-get-hold-of-fields-of-object-under-test-using-spring-and-mockito%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            You could create a package private method for your executorService, and use it in test to get executorService, however your test class and class under test should be in the same package.



            ExecutorService getExecutorService() {
            return executorService;
            }


            Besides this you could make use of @InjectMocks annotation instead @Before setUp().



            @InjectMocks
            private A a;





            share|improve this answer




























              0














              You could create a package private method for your executorService, and use it in test to get executorService, however your test class and class under test should be in the same package.



              ExecutorService getExecutorService() {
              return executorService;
              }


              Besides this you could make use of @InjectMocks annotation instead @Before setUp().



              @InjectMocks
              private A a;





              share|improve this answer


























                0












                0








                0







                You could create a package private method for your executorService, and use it in test to get executorService, however your test class and class under test should be in the same package.



                ExecutorService getExecutorService() {
                return executorService;
                }


                Besides this you could make use of @InjectMocks annotation instead @Before setUp().



                @InjectMocks
                private A a;





                share|improve this answer













                You could create a package private method for your executorService, and use it in test to get executorService, however your test class and class under test should be in the same package.



                ExecutorService getExecutorService() {
                return executorService;
                }


                Besides this you could make use of @InjectMocks annotation instead @Before setUp().



                @InjectMocks
                private A a;






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Dec 30 '18 at 16:02









                Artyom RebrovArtyom Rebrov

                190213




                190213






























                    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%2f53978095%2fhow-to-get-hold-of-fields-of-object-under-test-using-spring-and-mockito%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

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas