当前位置: 首页 > 知识库问答 >
问题:

grails spock测试模拟CommonsMultipartFile

冉俊德
2023-03-14

我用代码编写了以下旧方法,用于访问服务类中的请求对象,例如:

def someServiceMethod() {
  ....
  def webUtils = WebUtils.retrieveGrailsWebRequest()
  def request = webUtils.getCurrentRequest()
  MultipartHttpServletRequest mpr = (MultipartHttpServletRequest) request
  CommonsMultipartFile file = (CommonsMultipartFile) mpr.getFile("file")
  ....
}
@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
    //..
  }
}
| 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'

共有1个答案

燕寒
2023-03-14

而不是:GrailsMockMultipartFile

使用:org.springframework.mock.web.MockMultipartFile

 类似资料:
  • 简介 在 Laravel 应用程序测试中,你可能希望「模拟」应用程序的某些功能的行为,从而避免该部分在测试中真正执行。例如:在控制器执行过程中会触发事件(Event),从而避免该事件在测试控制器时真正执行。这允许你在仅测试控制器 HTTP 响应的情况时,而不必担心触发事件。当然,你也可以在单独的测试中测试该事件逻辑。 Laravel 针对事件、任务和 Facades 的模拟,提供了开箱即用的辅助函

  • #使用Mocks测试 在现实世界的应用程序中,我们的组件很可能具有外部依赖性。当为组件编写单元测试时,如果我们可以模拟这些外部依赖性,以使我们的测试仅依赖于被测试组件的行为,这将是理想的。 vue-loader提供了一个特性,它允许你使用inject-loader向*.vue组件注入任意依赖项。一般的想法是,不是直接导入组件模块,我们使用inject-loader为该模块创建一个“模块工厂”函数。

  • 如何模拟集成测试所需的许多依赖关系? 我使用Mockito进行纯单元测试。在这种情况下,Pure意味着测试一个类,嘲笑它的所有依赖关系。漂亮。 现在是集成测试。假设在这种情况下,集成测试将测试以下内容: 消息被放入队列 我们也可以说,在第2步中发生的处理是严肃的事情。它依赖于大量的数据库交互、多种外部服务、文件系统,以及各种各样的东西。流还会引发很多副作用,所以我不能简单地确保响应是正确的——我需

  • 我正在试着用mockito测试我的缓存层。 我用的是这里描述的咖啡因 基本上,我有这个... 这工作得很好,方法被缓存并且工作得很好。

  • 本文向大家介绍android-studio 测试模拟器,包括了android-studio 测试模拟器的使用技巧和注意事项,需要的朋友参考一下 示例 如果没有特定需求,请选择x86_64带有Google API的系统映像来创建模拟器。 它的工作方式比armeabi-v7a基于Intel x86 x64的计算机快。 有一些使用ARM体系结构编译和设计的SDK库。 如果您尝试将它们安装在基于Intel

  • spring bean xml 有几个使用真实对象预先编写的测试用例。有没有办法我可以模拟这个类B,得到注入类A和模拟几个方法?我只想在我的测试用例中这样做,以便预先编写的测试用例不受影响?