如何测试我的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
myTaskCRUDService
中的唯一方法是
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实现