Grails 集成测试用例中的模拟 CommonsMultipartFile
Mock CommonsMultipartFile in Grails integration test case
我有一个接受 CommonsMultipartFile 并将其上传到服务器的服务方法
class ExampleService() {
def saveFile(CommonsMultipartFile file) {
// some validation code for file
}
}
尝试同时使用 MockMultipartHttpServletRequest
和 GrailsMockMultipartFile
。
如果 MockMultipartHttpServletRequest
出现错误:
| org.codehaus.groovy.runtime.typehandling.GroovyCastException:
Cannot cast object 'org.springframework.mock.web.MockMultipartFile@2f39360'
with class 'org.springframework.mock.web.MockMultipartFile' to
class 'org.springframework.web.multipart.commons.CommonsMultipartFile'
与 GrailsMockMultipartFile
一样,出现以下错误:
| org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot
cast object 'org.codehaus.groovy.grails.plugins.testing.GrailsMockMultipartFile@1022f0bd'
with class 'org.codehaus.groovy.grails.plugins.testing.GrailsMockMultipartFile' to
class 'org.springframework.web.multipart.commons.CommonsMultipartFile'
引用了这个。
我应该如何模拟 CommonsMultipartFile
并将其作为参数传递到我的测试用例中?
解决方案
我找到了解决方案,请查看我的
在经历了不同的堆栈溢出链接和 CommonsMultipartFile
JDK 之后,我想出了这个解决方案
如果我使用了错误的方法,请告诉我@burtbeckwith
File getTestFile(String fileName = "") {
//Code which create file instance
}
// Inside my test case I have created CommonsMultipartFile test file and used it.
DiskFileItemFactory factory = new DiskFileItemFactory()
FileItem fileItem = factory.createItem( "file", "multipart/form-data", false, "logo.png" )
IOUtils.copy(new FileInputStream(getTestFile()), fileItem.getOutputStream())
CommonsMultipartFile testFile = new CommonsMultipartFile(fileItem)
如果您更改 saveFile(CommonsMultipartFile)
方法以接受接口 MultipartFile
的实例而不是特定的实现,它将更容易模拟并且您应该不会失去任何功能。
saveFile(MultipartFile)
我有一个接受 CommonsMultipartFile 并将其上传到服务器的服务方法
class ExampleService() {
def saveFile(CommonsMultipartFile file) {
// some validation code for file
}
}
尝试同时使用 MockMultipartHttpServletRequest
和 GrailsMockMultipartFile
。
如果 MockMultipartHttpServletRequest
出现错误:
| org.codehaus.groovy.runtime.typehandling.GroovyCastException:
Cannot cast object 'org.springframework.mock.web.MockMultipartFile@2f39360'
with class 'org.springframework.mock.web.MockMultipartFile' to
class 'org.springframework.web.multipart.commons.CommonsMultipartFile'
与 GrailsMockMultipartFile
一样,出现以下错误:
| org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot
cast object 'org.codehaus.groovy.grails.plugins.testing.GrailsMockMultipartFile@1022f0bd'
with class 'org.codehaus.groovy.grails.plugins.testing.GrailsMockMultipartFile' to
class 'org.springframework.web.multipart.commons.CommonsMultipartFile'
引用了这个
我应该如何模拟 CommonsMultipartFile
并将其作为参数传递到我的测试用例中?
解决方案
我找到了解决方案,请查看我的
在经历了不同的堆栈溢出链接和 CommonsMultipartFile
JDK 之后,我想出了这个解决方案
如果我使用了错误的方法,请告诉我@burtbeckwith
File getTestFile(String fileName = "") {
//Code which create file instance
}
// Inside my test case I have created CommonsMultipartFile test file and used it.
DiskFileItemFactory factory = new DiskFileItemFactory()
FileItem fileItem = factory.createItem( "file", "multipart/form-data", false, "logo.png" )
IOUtils.copy(new FileInputStream(getTestFile()), fileItem.getOutputStream())
CommonsMultipartFile testFile = new CommonsMultipartFile(fileItem)
如果您更改 saveFile(CommonsMultipartFile)
方法以接受接口 MultipartFile
的实例而不是特定的实现,它将更容易模拟并且您应该不会失去任何功能。
saveFile(MultipartFile)