junit - Mockito: How to test if another class' method is called within a method of a Mock? -
so have service class.
public class organisationservice { public list<organisation> findallforeignorganisations() { // few rows of jpql-code searches database return mycriteria.getresultlist(); } //...other methods return lists other types of organisations... } then have class want test. want test is, when following class's method getallowedorganisations given parameter (organisationtype.foreign in case), uses aforementioned method findallforeignorganisation() search list of organisations.
public class organisationselectionoptions { @inject organisationservice os; public list<organisation> getallowedorganisations(assignment a) { organisationtype type = a.getorganisationtype(); return giveorganisationlistwithtype(type); } private list<organisation> giveorganisationlistwithtype(organisationtype type) { list<organisation> organisations; if (type == organisationtype.foreign) { organisations = os.findallforeignorganisations(); } // ...some other organisations types on if-clauses... return organisations; } } } i made junit test test this. have create mocks of these aforementioned classes because access database , can't access database in tests , avoid implementing database structure tests.
@runwith(arquillian.class) @preparefortest(organisation.class) public class organisationselectiontest { @test public void testwithforeigntype() throws rreflectionutilexception { // ...code create dummy assignment foreign type organisation... mockedorganisationservice = mock(organisationservice.class); mockedorganisationselectionoptions = mock(organisationselectionoptions.class); } } now tried mockito's verify somehow test, if mockedorganisationselectionoptions.giveorganisationlistwithtype(dummyassignmentwithforeigntypeorganisation) call os.findallforeignorganisations(); no avail.
i'm clueless beginner on creating tests. vastly appreciated , rewarded, thank you. i'm ready answer comments/questions give more detail on issue.
this can done via multiple ways go on one. first, because use @inject instance of organisationservice, not mess around mocking new organisationservice() constructor call. instead can setup getter method organisationservice, mock it.
add getter in organisationselectionoptions .
organisationservice getorganisationservice(){ return os; } edit giveorganisationlistwithtype method use our new getter.
organisations = getos().findallforeignorganisations(); in unit test mock instance of organisationservice. there 2 ways this.
method one: add following in toimeksiannonyhtiovalintatest.
@mock private organisationservice mockos; method two: instantiate mockos in method doing testing.
organisationservice mockos = mock(organisationservice.class); for method 1 work need include..
@runwith(mockitojunitrunner.class) in toimeksiannonyhtiovalintatest. class level annotation.
next need spy object being tested.
organisationselectionoptions totest = spy( new organisationselectionoptions ()); then mock our new getter method.
when(totest.getorganisationservice()).thenreturn(mockos); there go.
edit: added...
edit giveorganisationlistwithtype method use our new getter.
organisations = getos().findallforeignorganisations();
Comments
Post a Comment