java - How can I test a method which invoke protected (unwanted) methods of parent class? -


i'm stuck in weird case. have specific code need test. here is:

public class {      /*      * real method of real class big don't want test it.      * that's why use throwing exception.      */     protected void method(integer result) {         throw new runtimeexception("oops!");     }      protected <t> t generifiedmethod(string s, t type) {         throw new runtimeexception("oops!");     }      protected void mainmethod(integer value) {         throw new runtimeexception("oops!");     } } 

i have child class:

public class b extends {      @override     protected void mainmethod(integer value) {         if (value == 100500) {             integer result = super.generifiedmethod("abc", 100);             super.method(result);         }         super.mainmethod(value);     } } 

i need cover child class tests.

i trying lot of combinations powermockito, none of them can verify invocation of protected methods of parent class. also, have restriction on use mockito, powermockito , testng.

here test code (one of variants):

@test public void should_invoke_parent_logic_methods_of_a_class() throws exception {      /* given */     aspy = powermockito.spy(new a());      powermockito.doreturn(250).when(aspy, "generifiedmethod", "abc", 100);     powermockito.donothing().when(aspy, "method", 250);     powermockito.suppress(method(a.class, "mainmethod", integer.class));      /* when */     aspy.mainmethod(100500);      /* */     /**      * here need verify invocation of methods of class (generifiedmethod(), method(),      * , mainmethod()). don't need them invoked because logic unwanted      * tested in case of tests class b.      */ } 

i appreciate suggestions how test class b. thanks.

update

if add then section code

mockito.verify(aspy, times(3)).mainmethod(100500); mockito.verify(aspy, times(1)).generifiedmethod("abc", 100); mockito.verify(aspy, times(1)).method(250); 

it gives me following error message:

wanted not invoked: a.generifiedmethod("abc", 100); 

did consider variant change design of classes , use composition instead of inheritance ? able mock / spy instance of class , inject instance of class b. in such case able configure whatever behavior need.

i not sure docallrealmethod() make trick you, cause have option mock method or invoke real one, not both simultaneously.


Comments

Popular posts from this blog

javascript - Jquery show_hide, what to add in order to make the page scroll to the bottom of the hidden field once button is clicked -

javascript - Highcharts multi-color line -

javascript - Enter key does not work in search box -