grails如何创建单元测试

grails如何创建单元测试,grails,Grails,我对使用grails有点陌生,所以如果这有一个明显的答案,请原谅我。我已经阅读了有关创建新控制器时如何自动创建单元测试的文档。从我在网上和书中看到的情况来看,控制器测试类名在末尾附加了“test”。在\test\unit\目录中使用grails 2.3.1创建了StoreControllerSpec.groovy 因为我有 @TestFor(StoreController) class StoreControllerSpec extends Specification { def setup(

我对使用grails有点陌生,所以如果这有一个明显的答案,请原谅我。我已经阅读了有关创建新控制器时如何自动创建单元测试的文档。从我在网上和书中看到的情况来看,控制器测试类名在末尾附加了“test”。在\test\unit\目录中使用grails 2.3.1创建了StoreControllerSpec.groovy 因为我有

@TestFor(StoreController)
class StoreControllerSpec extends Specification {

def setup() {
}

def cleanup() {
}

void testSomething() {
\\ added to see if the test works
controller.index()
assert 'Welcome to the gTunes store!' == response.text
}
}
我遇到的问题是,当运行测试应用程序时,它尝试运行单元测试,但没有输出任何内容,并且没有标记为失败

grails> test-app
| Running without daemon...
| Compiling 1 source files
| Compiling 1 source files.
| Running 1 unit test...
| Completed 0 unit test, 0 failed in 0m 4s
| Tests PASSED - view reports in

在以前的grails版本中,包含测试的类必须以“tests”结尾。也许值得一试

例如


我通过改变测试的编写方式来解决这个问题

void "test Something"() {
controller.index()
expect:
"Welcome to the gTunes store!" == response.text
}
这是因为grails现在默认使用spock测试框架

Grails2.3.x默认使用spock框架进行测试

//控制器类

类DomainListController{

def index() {
    redirect (action:"list")
}

def list() {
    render "hello"
}
}

//测试班

@TestFor(域列表控制器) 类DomainListControllerSpec扩展了规范{

def setup() {
}

def cleanup() {
}

void "test something"() {
}

//test method to test index() of DomainListController
def void testIndex() {
    controller.index()              
    expect:
     response.redirectedUrl == 'domainList/listll'
}

//test method to test list() of DomainListController
def void testList() {
    controller.list()       
            expect:
    response.text == "hello"
}
}

-->@TestFor mixin负责控制程序模拟。您可以在这里很好地访问一些关键字,如controller、contoller.params、controller.request、controller.response,而无需实例化controller

-->response对象是GrailsMockHttpServletResponse的一个实例(来自包org.codehaus.groovy.grails.plugins.testing),它扩展了Spring的MockHttpServletResponse类,并有许多有用的方法来检查响应的状态

-->预期:是预期的结果吗

希望这对你有帮助:)
cheers-Mothi

对不起,运气不好,我重新命名了该类,它也做了同样的事情-Spock测试方法至少需要一个标记块,请参见
def setup() {
}

def cleanup() {
}

void "test something"() {
}

//test method to test index() of DomainListController
def void testIndex() {
    controller.index()              
    expect:
     response.redirectedUrl == 'domainList/listll'
}

//test method to test list() of DomainListController
def void testList() {
    controller.list()       
            expect:
    response.text == "hello"
}