如何测试我的Grails服务保存方法?

如何测试我的Grails服务保存方法?,grails,spock,Grails,Spock,我已经使用Grails create service TaskCRUDService创建了Grails服务。该命令在grails app\services和TaskCRUDService.groovy文件夹中创建了文件TaskCRUDService.groovy myTaskCRUDService中的唯一方法是 Task save(String name) { Task task = new Task() task.name = name task.save(flush

我已经使用
Grails create service TaskCRUDService
创建了Grails服务。该命令在
grails app\services
TaskCRUDService.groovy
文件夹中创建了文件
TaskCRUDService.groovy

my
TaskCRUDService
中的唯一方法是

Task save(String name) {
    Task task = new Task()
    task.name = name

    task.save(flush: true, failOnError: true)
}
我想测试这个方法,所以我在测试类中填充了Grails生成的“testsomething”方法的主体。这是我的
TaskCRUDServiceSpec
代码:

@TestFor(TaskCRUDService)
class TaskCRUDServiceSpec extends Specification {

    void "test something"() {
        when:
            Task t = service.save('task name')
        then:
            assert t.name == 'task name'
    }
}
但是测试不起作用。当我运行
grails测试应用程序时

java.lang.IllegalStateException: Method on class [Task] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.
        at TaskCRUDService.$tt__save(TaskCRUDService.groovy:29)
        at TaskCRUDServiceSpec.test create(TaskCRUDServiceSpec.groovy:24)

这看起来应该有效,但即使有效,这也是一个糟糕的测试。永远不要使用单元测试来测试持久性。使用集成测试,这样您就可以使用真实的数据库,而不仅仅是使用ConcurrentHashMap存储数据的内存中GORM实现。

看起来应该可以,但即使可以,这也是一个糟糕的测试。永远不要使用单元测试来测试持久性。使用集成测试,以便使用真实的数据库,而不仅仅是使用ConcurrentHashMap存储数据的内存中GORM实现