我已经使用grails create-service TaskCRUDService
创建了Grails服务。该命令在TaskCRUDService.groovy
和grails-app\services
文件夹中创建了文件TaskCRUDServiceSpec.groovy
和test\unit
。
我的TaskCRUDService
中唯一的方法是
Task save(String name) {
Task task = new Task()
task.name = name
task.save(flush: true, failOnError: true)
}
我想测试此方法,因此,我在测试类中填充了Grails生成的“test something”方法的主体。这是我的
TaskCRUDServiceSpec
代码:@TestFor(TaskCRUDService)
class TaskCRUDServiceSpec extends Specification {
void "test something"() {
when:
Task t = service.save('task name')
then:
assert t.name == 'task name'
}
}
但是测试不起作用。当我运行
grails test-app
时,我得到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实现。
关于grails - 如何测试Grails服务保存方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393253/