1

マルチパートリクエスト(xml + binary file1 + binary file2 + ...)を受け入れるコントローラーをGrailsで作成しました。そのコントローラーをユニットテストするにはどうすればよいですか?単体テストでリクエストの内容を設定するにはどうすればよいですか?サンプルコードは大歓迎です!

4

3 に答える 3

6

私は Grails 2.4 を使用しています。単体テストでGrailsMockMultipartFileandメソッドを使用するだけです。request.addFile

このコードは、Spock テスト フレームワークを使用して Grails 2.4.4 で動作します。

コントローラ側:

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
    }
}

単体テスト側:

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)
    }

}
于 2014-12-04T16:19:19.970 に答える
2

Spock を使用しており、コードは次のようになります。

def mockFile = new MockMultipartFile(Constants.PARAM_DA_FILE, 'filename.xls', 'application/vnd.ms-
excel', articleFile.bytes)
params.(Constants.PARAM_DA_FILE) = mockFile
controller.request.addFile(mockFile)
于 2012-12-01T16:11:56.780 に答える