gpt4 book ai didi

unit-testing - 如何在 Grails 中测试文件上传

转载 作者:行者123 更新时间:2023-11-28 19:50:58 25 4
gpt4 key购买 nike

我有一个 Controller ,它接收一个文件作为参数的一部分。我想知道如何测试这个?

我的 Controller Action :

def save () {
def colorInstance = new Color(params.color)
CommonsMultipartFile file = request.getFile('color.filename')
fileUploadService.upload(colorInstance, file, "foldername")
if (requestInstance.save(flush: true)) {
withFormat {
html {redirect(action: "list") }
js {render "test"}
}
}
}

我从这样的事情开始:...

import org.junit.Before
import grails.test.mixin.Mock
import grails.test.mixin.TestFor

@TestFor(ColorController)
@Mock(Color)
class ColorControllerTests {

@Before
void setUp() {
controller.fileUploadService = new FileUploadService
}
}

问题

  • 我不知道如何测试用于文件上传的 CommonsMultipartFile
  • 此外,此测试用例将位于 unit 测试文件夹中。我该如何执行?

最佳答案

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

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

Controller 端:

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

}

关于unit-testing - 如何在 Grails 中测试文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16508836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com