unit testing - Mocking grails method that uses a findAll, Generating a MissingMethodException -
def retrieveeatenfood(string token, string addeddate) { def consumer = consumer.findbymobiletoken(token) if(consumer != null) { def eflist = [] def list = consumer.findall("from eatenfood ef date(ef.dateadded) = date(:da)",[da:sdf_long.parse(addeddate)]) list.each{ def eatenlist = [:] eatenlist.put("foodtype",it.food.name) eatenlist.put("sequencenumber",it.sequencenumber) eatenlist.put("eatendate", it.eatendate) eatenlist.put("dateadded",it.dateadded) eflist.add(eatenlist); } return eflist; } }
trying mock above method, findall keep generating exception.
this issue works! need write test , keep getting exception. can me please!
groovy.lang.missingmethodexception: no signature of method: carrotdev.consumer.findall() applicable argument types: (java.lang.string, java.util.linkedhashmap) values: [from eatenfood ef date(ef.dateadded) = date(:da), [da:sun feb 13 01:51:47 ast 2011]] possible solutions: findall(groovy.lang.closure), find(groovy.lang.closure) @ carrotdev.consumerservice.retrieveeatenfood(consumerservice.groovy:146) @ carrotdev.consumerservice$retrieveeatenfood.call(unknown source) @ carrotdev.consumerservicetests.testeatenfoodretrievedsucessfully(consumerservicetests.groovy:359)
i move query consumer domain class descriptive name, e.g.
static list<eatenfood> findalleatenbydate(string date) { consumer.findall( "from eatenfood ef date(ef.dateadded) = date(:da)", [da:sdf_long.parse(addeddate)]) }
then call simply
def list = consumer.findalleatenbydate(addeddate)
and can mock with
def foods = [new eatenfood(...), new eatenfood(...), ...] consumer.metaclass.static.findalleatenbydate = { string date - > foods }
be sure test finder method in consumer integration test.
Comments
Post a Comment