【问题标题】:Grails 2.3 integration test behaving badly - ServletContext must not nullGrails 2.3 集成测试表现不佳 - ServletContext 不能为空
【发布时间】:2014-08-15 13:16:06
【问题描述】:

我看过一些关于 Grails 2.3.x 和集成测试问题的帖子,但没有任何帮助我的情况,所以这里是:

我想针对真实的实时数据库 (Oracle) 测试我的 Grails 服务,因此我在 Spock 中编写了一些集成测试。无论我尝试哪种推荐的方法,我都会得到同样的错误。我希望这是简单而愚蠢的事情,但我担心有一个问题需要 Grails 团队解决。

这是代码,经过适当清理以消除我工作地点的任何提示:

package com.mycompany

import grails.test.spock.IntegrationSpec
import spock.lang.*
import com.mycompany.User

class UserServiceSpec extends IntegrationSpec {

    UserService userService

    def setup() {
    }

    def cleanup() {
    }

    void "find a user by their id"() {
            when:
                User user = userService.find('1234')
        then:
                user.firstName == 'Brian'
    }
}

从我读到的所有内容来看,这就是您使用 Grails 2.3 及更高版本的方式。我一直收到以下错误

java.lang.IllegalArgumentException: ServletContext must not be null

我们总是感谢任何帮助。

布赖恩

【问题讨论】:

  • 您没有提供足够的信息来确定问题所在。请参阅github.com/jeffbrown/integrationtestdemo 上的示例应用程序。 github.com/jeffbrown/integrationtestdemo/blob/master/test/… 的集成测试通过。
  • 杰夫,那么也许是版本差异。我将 Groovy 2.1.6 与 Grails 2.3.5 一起使用。
  • 我认为 Grails 2.3.5 不支持 Groovy 2.1.6。我们随 Groovy 2.1.9 一起发布了 2.3.5。您是自己构建的 dist 还是只是一个错字?
  • 我只是将更改推送到该存储库,将应用程序降级到 2.3.5,并且测试仍然通过了我。它对你来说失败了吗?
  • 我会升级看看会发生什么。

标签: integration-testing spock grails-2.3 grails-services


【解决方案1】:

可能导致该问题的一件事是,如果您的 UserServiceSpec 是在 test/unit/ 下定义的,而不是应该在 test/integration 下定义的。

【讨论】:

  • 如果您将应用程序中github.com/jeffbrown/integrationtestdemo 的集成测试从test/integration/ 移动到test/unit/,您将看到ServletContext must not be null 错误。
  • 在我看来,通过仅运行集成测试 grails test-app integration: 并查看相关测试是否运行,可以确定这是问题所在。
  • @TedDelezene 在我看来,通过查看文件系统以查看源文件的定义位置以及如果它在test/unit/ 下,将其移至@,可以确定这是问题所在987654330@ 并从那里运行测试。
  • 还有其他情况会导致相同的错误消息,并且过去已经解决了与此相关的错误。我很想知道问题是否只是在错误的目录中定义了测试。如果确实存在导致此问题的错误,我想修复它,但为了做到这一点,我需要知道什么样的场景会触发问题。
  • 测试位于“test/integration”下的正确位置,并使用“grails test-app integration:”运行。该目录中的所有集成测试都以相同的方式失败。
【解决方案2】:

我在向我的套件添加新的集成测试时遇到了这个问题。在这种情况下,我扩展了IntegrationSpec,就像集成测试一样。

不幸的是,集成范围的其他测试使用@Mock@TestFor 注释错误地完成,这些注释仅用于单元测试。修复了其他测试,解决了新测试出现ServletContext must not be null错误信息的问题。

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 2013-02-12
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2020-08-28
    • 2015-02-10
    相关资源
    最近更新 更多