grails - 如何测试Grails服务保存方法?

标签 grails spock

我已经使用grails create-service TaskCRUDService创建了Grails服务。该命令在TaskCRUDService.groovygrails-app\services文件夹中创建了文件TaskCRUDServiceSpec.groovytest\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/

相关文章:

grails - Spock - 近似比较

Grails中的Spring DSL-resources.groovy-不同文件中的bean配置?

grails - 在服务的方法期间grails数据库的提交

hibernate - Grails Hibernate GORM,具有一对一关系的 Multi-Tenancy

java - spock - 模拟静态方法不起作用

unit-testing - 测试具有来自src/groovy的bean的grails Controller

chalice "Cannot set readonly property: programId"

grails - 在Grails中查询多对多关系时出错

java - 使用 Spock 进行测试 - 使用复杂的数据提供程序

groovy - 如何获取 Geb 模块实例及其声明的类?