mockito - How to Mock repository calls ATG -
can use mockito write tests methods implements repository calls? example below method using named query ebooks book repository -
public repositoryitem[] getebooks(dynamohttpservletrequest request) { repositoryitem[] results = null; repository rep = (repository) request.resolvename("/atg/products/bookrepository"); try { repositoryitemdescriptor desc = rep.getitemdescriptor("book"); repositoryview view = desc.getrepositoryview(); if (view instanceof namedqueryview) { namedqueryview nameview = (namedqueryview) view; parametersupportview psupportview = (parametersupportview) view; string queryname = "getbooks"; query namedquery = nameview.getnamedquery(queryname); object[] params = { "ebook" }; //book type results = psupportview.executequery(namedquery, params); } } catch (repositoryexception e) { logerror(e.getmessage()); } return results; } thanks.
yes can. question though testing code or atg in instance?
assuming method above contained in class called getbooks test this:
@injectmocks private getbooks testobj; @mock private dynamohttpservletrequest requestmock; @mock private repository bookrepositorymock; @mock private repositoryitemdescriptor bookrepositoryitemdescriptormock; @mock private gsaview bookrepositoryviewmock; //the oddity here gsaview common denominator namedqueryview , parametersupportview @mock private query namedquerymock; @mock private repositoryitem resultrepositoryitem1, resultrepositoryitem2; @beforemethod(groups = { "unit" }) public void setup() throws exception { testobj = new getbooks(); mockitoannotations.initmocks(this); mockito.when(requestmock.resolvename("/atg/products/bookrepository")).thenreturn(bookrepositorymock); mockito.when(bookrepositorymock.getitemdescriptor("book")).thenreturn(bookrepositoryitemdescriptormock); mockito.when(bookrepositoryitemdescriptormock.getrepositoryview()).thenreturn(bookrepositoryviewmock); mockito.when(bookrepositoryviewmock.getnamedquery("getbooks")).thenreturn(namedquerymock); list<repositoryitem> resultarraylist = new arraylist<repositoryitem>(); resultarraylist.add(resultrepositoryitem1); resultarraylist.add(resultrepositoryitem2); object[] params = { "ebook" }; //it may simpler test if constant mockito.when(bookrepositoryviewmock.executequery(namedquerymock, params)).thenreturn(resultarraylist.toarray(new repositoryitem[resultarraylist.size()])); } @test(groups = { "unit" }) public void testgetebooks()throws exception{ repositoryitem[] result = testobj.getebooks(requestmock); assert.asserttrue(result.length == 2); //what want test? } this gives greenbar when executed via testng. testing here?
on separate note. should use (protected) constants more since you'll able use them in package scope of mockito tests.
Comments
Post a Comment