使用多部分请求测试Grails控制器

Rez*_*eza 1 grails groovy unit-testing

我在Grails中编写了一个控制器,它接受多部分请求(xml +二进制文件1 +二进制文件2 + ...).如何对该控制器进行单元测试?如何在单元测试中设置请求的内容?任何示例代码表示赞赏!

Dam*_*ils 5

我使用的是Grails 2.4,你可以在单元测试中使用GrailsMockMultipartFilerequest.addFile方法.

这段代码适用于Grails 2.4.4,带有Spock测试框架:

控制器端:

class FileUploadController {

    def upload() {
        def multipartFile = request.getFile('requestParamName')
        if (multipartFile.empty) {
            flash.message = 'Error: file cannot be empty'
            render(view: 'upload')
            return
        }

        // do something now with your file
    }
}
Run Code Online (Sandbox Code Playgroud)

单元测试方:

import grails.test.mixin.TestFor
import org.codehaus.groovy.grails.plugins.testing.GrailsMockMultipartFile
import spock.lang.Specification

@TestFor(FileUploadController)
class FileUploadControllerSpec extends Specification {

    void "upload should add flash error message if empty file in request"() {
        given:
        def multipartFile = new GrailsMockMultipartFile('requestParamName', 'someExcelFile.xls', 'application/vnd.ms-excel', new byte[0])
        request.addFile(multipartFile)

        when:
        controller.upload()

        then:
        assertEquals('Error: file cannot be empty', flash.message)
    }

}
Run Code Online (Sandbox Code Playgroud)