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

时间:2015-04-01 14:19:07

标签: grails spock

我已使用grails create-service TaskCRUDService创建了Grails服务。该命令在TaskCRUDService.groovygrails-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生成的方法。这是我的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)

1 个答案:

答案 0 :(得分:4)

看起来它应该有用,但即使它确实如此,也是一个糟糕的测试。切勿使用单元测试来测试持久性。使用集成测试,以便您使用真实数据库,而不仅仅是使用ConcurrentHashMap存储数据的内存中GORM实现。