【问题标题】:Spock Save Test [closed]Spock保存测试[关闭]
【发布时间】:2012-07-10 02:09:42
【问题描述】:

我正在尝试测试这个方法

  def save() {

        def activityArtifactInstance = new ActivityArtifact(params)
        def activityInstance = Activity.get(params.activity.id)

        def uploadedFile = request.getFile('myFile')
        if (!uploadedFile.empty) {
            def userDir = new File(ConfigurationHolder.config.getProperty("userfiles").toString(), "/files")
            userDir.mkdirs()
            uploadedFile.transferTo(new File(userDir, uploadedFile.originalFilename))
            activityArtifactInstance.fileName = uploadedFile.originalFilename
        }

        if (!activityArtifactInstance.save(flush: true)) {
            render(view: "create", model: [activityArtifactInstance: activityArtifactInstance, activityInstance: activityInstance])
            return
        }

        flash.message = message(code: 'default.created.message', args: [message(code: 'activityArtifact.label', default: 'ActivityArtifact'), activityArtifactInstance.id])
        redirect(controller: "activity", action: "show", id: activityInstance.id, params: [phaseId:activityInstance.phase.id])
    }

这是我的测试代码:-

 def 'save action: valid activity artifact'() {

        setup:
        mockDomain(ActivityArtifact)
        mockI18N(ActivityArtifactController)
        controller.params.name = "Activity Artiface"

        when:
        controller.save()

        then:
        redirectArgs.action == "show"
        controller.flash.message != null


    }

我得到了这个错误:-

java.lang.NullPointerException:无法在空对象上获取属性“id”

如何调用活动对象的id

【问题讨论】:

  • 这里有更多内容会很有用:控制器中的哪一行抛出异常?您使用的是什么版本的 Grails?什么版本的 Spock?

标签: unit-testing grails spock


【解决方案1】:

您的控制器操作假定将有一个 activity.id 参数并且您的测试没有设置一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多