grails spock test mock CommonsMultipartFile

一个人想着一个人 提交于 2019-12-23 02:21:39

问题


I've following old method written in code, which is for accessing request object in service class such as:

def someServiceMethod() {
  ....
  def webUtils = WebUtils.retrieveGrailsWebRequest()
  def request = webUtils.getCurrentRequest()
  MultipartHttpServletRequest mpr = (MultipartHttpServletRequest) request
  CommonsMultipartFile file = (CommonsMultipartFile) mpr.getFile("file")
  ....
}

This is my unit test code for serivce class.

@TestFor(SomeService)
class SomeServiceSpec extends Specification {
  void "test someServiceMethod"() {
    given:
    MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest()

    FileInputStream inFile = new FileInputStream("./test-data/Hiearchy-003.xlsx") //valid file path
    def multipartFile = new GrailsMockMultipartFile('file', 'file.xls', 'multipart/form-data', inFile)
    request.addFile(multipartFile)
    GrailsWebRequest webRequest = new GrailsWebRequest(
            request,
            new MockHttpServletResponse(),
            new MockServletContext()
    )
    request.setAttribute(GrailsApplicationAttributes.WEB_REQUEST,webRequest)
    RequestContextHolder.setRequestAttributes(webRequest);

    when:
    def result = service.someServiceMethod()

    then:
    result != null
    //some more assertions
    //..
  }
}

I'm stuck with following error.

| Failure:  test someServiceMethod(SomeServiceSpec)
|  org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.codehaus.groovy.grails.plugins.testing.GrailsMockMultipartFile@6ae8e5dd' with class 'org.codehaus.groovy.grails.plugins.testing.GrailsMockMultipartFile' to class 'org.springframework.web.multipart.commons.CommonsMultipartFile'

Anybody faced such issue before in grails unit test?


回答1:


Instead of : GrailsMockMultipartFile,

use: org.springframework.mock.web.MockMultipartFile.




回答2:


I just realised following line is just unnecessary if we use input stream direct it should not be problem hence solved my issue..

CommonsMultipartFile file = (CommonsMultipartFile) mpr.getFile("file")


来源:https://stackoverflow.com/questions/28910532/grails-spock-test-mock-commonsmultipartfile

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!