fer*_*ith 3 grails junit unit-testing grails-orm
def retrieveEatenFood(String token, String addedDate) {
def consumer = Consumer.findByMobileToken(token)
if(consumer != null) {
def efList = []
def list = consumer.findAll("from EatenFood as ef where 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;
}
}
Run Code Online (Sandbox Code Playgroud)
试图模拟上面的方法,但findAll继续生成异常.
这个问题有效!现在我需要为它编写测试,并且我一直得到这个例外.任何人都可以帮助我!
groovy.lang.MissingMethodException: No signature of method: carrotdev.Consumer.findAll() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap) values: [from EatenFood as ef where date(ef.dateAdded) = date(:da), [da:Sun Feb 13 01:51:47 AST 2011]]
Possible solutions: findAll(groovy.lang.Closure), find(groovy.lang.Closure)
at carrotdev.ConsumerService.retrieveEatenFood(ConsumerService.groovy:146)
at carrotdev.ConsumerService$retrieveEatenFood.call(Unknown Source)
at carrotdev.ConsumerServiceTests.testEatenFoodRetrievedSucessfully(ConsumerServiceTests.groovy:359)
Run Code Online (Sandbox Code Playgroud)
我会使用描述性名称将查询移动到Consumer域类,例如
static List<EatenFood> findAllEatenByDate(String date) {
consumer.findAll(
"from EatenFood as ef where date(ef.dateAdded) = date(:da)",
[da:sdf_long.parse(addedDate)])
}
Run Code Online (Sandbox Code Playgroud)
然后电话很简单
def list = Consumer.findAllEatenByDate(addedDate)
Run Code Online (Sandbox Code Playgroud)
你可以轻松地模仿
def foods = [new EatenFood(...), new EatenFood(...), ...]
Consumer.metaClass.static.findAllEatenByDate = { String date - > foods }
Run Code Online (Sandbox Code Playgroud)
务必在消费者集成测试中测试finder方法.
| 归档时间: |
|
| 查看次数: |
3278 次 |
| 最近记录: |