gpt4 book ai didi

bash - 如何重用 bat 单元测试

转载 作者:行者123 更新时间:2023-12-04 15:27:35 24 4
gpt4 key购买 nike

我期待在不同环境中重用 bats 单元测试代码。我想知道是否可以为两个文件使用通用的 @test 代码在一个地方。

我的第一个单元测试文件将在我的开发环境中运行:

#!/usr/bin/env bats

load 'test_helper/bats-support/load'
load 'test_helper/bats-assert/load'

setup() {

# Development environment
PROJECT_PATH="/d/develop/myproject"
}

@test 'check project path' {
cd $PROJECT_PATH
run git fetch origin
refute_output --partial 'fatal: not a git repository (or any of the parent directories): .git'
}

我的第二个单元测试文件运行相同的测试,并将在部署或生产环境中运行:

#!/usr/bin/env bats

load 'test_helper/bats-support/load'
load 'test_helper/bats-assert/load'

setup() {

# Production environment
PROJECT_PATH="/var/myproject"
}

@test 'check project path' {
cd $PROJECT_PATH
run git fetch origin
refute_output --partial 'fatal: not a git repository (or any of the parent directories): .git'
}

如您所见,测试代码是相同的,仅更改设置函数中的 $PROJECT_PATH 值。

感谢您花时间阅读这个问题。

最佳答案

有几种方法可以解决这个问题:

  1. 只需删除 setup 函数并在 测试之外设置 PROJECT_PATH
  2. 设置一个合理的默认值(并在开发中覆盖它)。
  3. 使 PROJECT_PATH 变量成为必需的(如果未设置则使测试失败)。
  4. 如果更多测试需要特定于环境的设置,请在测试外部设置 ENVIRONMENT 并根据 ENVIRONMENT 的值设置 PROJECT_PATH

(请注意,为此只需要更改setup 函数,check project path @test 函数保持原样)

由于谈话是廉价的,代码胜于 Eloquent ,这里有一些例子来说明我对每个选项的意思:

选项 1. 设置 PROJECT_PATH 测试

在调用 BATS 之前完全删除 setup 并设置 PROJECT_PATH:

export PROJECT_PATH="/var/myproject"
bats ./my_test.bats

选项 2. 设置合理的默认值

将生产值设置为默认值并允许从测试外部设置它:

setup() {
PROJECT_PATH="${PROJECT_PATH:-/var/myproject}"
}

选项 3. 使 PROJECT_PATH 成为必需

如果 PROJECT_PATH 尚未设置,要中止并使测试失败,请将当前设置替换为:

setup() {
if [[ ! -v "${PROJECT_PATH}" ]]; then
skip 'Required environment variable "$PROJECT_PATH" not set!'
return 1
fi
}

选项 4. 使用 ENVIRONMENT

不是直接依赖于 PROJECT_PATH,而是在调用 BATS 时设置一个 $ENVIRONMENT 并以此为基础设置 PROJECT_PATH:

setup() {

if [[ "${ENVIRONMENT}" == 'development' ]];then
PROJECT_PATH="/d/develop/myproject"
elif [[ "${ENVIRONMENT}" == 'production' ]];then
PROJECT_PATH="/var/myproject"
else
skip "Unknow \$ENVIRONMENT: '${ENVIRONMENT}'"
return 1
fi
}

结论

哪种解决方案最好取决于您所需的设置。当然,这些解决方案之间的交叉也是可能的。我会把它作为练习留给读者......

关于bash - 如何重用 bat 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61964593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com