【发布时间】:2021-03-05 16:21:43
【问题描述】:
我得到了一个 Jenkins 库项目,我想为它编写一些单元测试。我目前正在使用Jenkins Pipeline Shared Libraries Gradle Plugin 其中sets up source paths for unit and integration tests。
我要测试的源文件位于src/org/example/pipeline/Terraform.groovy,看起来像:
package org.example.pipeline
def terraformNewWorkspace(String env, Map config) {
def tfWSCreate = """
#!/bin/bash
set -e
terraform workspace new ${env} || true
terraform workspace select ${env}
terraform workspace list
"""
if (config.currentWorkingDirectory != null) {
dir("${config.currentWorkingDirectory}") {
sh(returnStatus: false, script: tfWSCreate)
}
} else {
sh(returnStatus: false, script: tfWSCreate)
}
}
我创建了一个test/unit/groovy/example/PipelineTests.groovy,如下所示:
import static org.example.pipeline.Terraform.terraformNewWorkspace as terraformNewWorkspace
class TerraformUnitTests extends GroovyTestCase {
void testNewWorkspace() {
terraformNewWorkspace("dev", [currentWorkingDirectory: "/tmp/test"])
}
}
但是,当我尝试使用 gradle test 执行此操作时,我得到了 groovy.lang.MissingMethodException at PipelineTests.groovy。我还尝试了以下方法,因为一些文档似乎表明不属于类的函数在 Groovy 中添加到具有文件名的类中,但我得到了关于缺少方法的相同异常。
import org.example.pipeline.Terraform
...
t = new Terraform()
t.terraformNewWorkspace("dev", [currentWorkingDirectory: "/tmp/test"])
使用 gradle/groovy 导入和测试这个单独函数的正确方法是什么?
【问题讨论】:
标签: unit-testing gradle groovy jenkins-pipeline jenkins-plugins