2015-04-01 65 views
0

我使用grails create-service TaskCRUDService创建了Grails服务。该命令在test\unit文件夹中创建了grails-app\servicesTaskCRUDServiceSpec.groovy中的文件TaskCRUDService.groovy如何测试我的Grails服务保存方法?

唯一的方法我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) 

回答

4

这看起来像它应该工作,但即使做了,这是一个坏的测试。切勿使用单元测试来测试持久性。使用集成测试,以便使用真实数据库,而不仅仅是使用ConcurrentHashMap存储数据的内存GORM实现。