您不应该使用单元测试来测试持久性-您只是在测试模拟框架。
而是将条件查询移动到域类中适当命名的方法,并使用集成测试针对数据库进行测试:
class Event { ... static Set<Event> findAllEventsByDay(Date date, int offset, int max) { ... }}class EventService { Set<Event> listEventsForDate(Date date, int offset, int max) { ... return Event.findAllEventsByDay(date, offset, max) }}如果将service方法作为包装仍然有价值(例如,如果它实现了数据库查询之上和之外的一些业务逻辑),则现在可以轻松进行单元测试,因为可以轻松模拟出静态域类方法调用:
def events = [new Event(...), new Event(...), ...]Event.metaClass.static.findAllEventsByDay = { Date d, int offset, int max -> events }这是适当的,因为您正在测试服务如何使用其接收的数据,并假设集成测试中涵盖了检索。



