如何从我的笔记中自动生成测试名称?

How can I automate generation of test names from my notes?

在编写测试用例之前,我经常在将成为测试用例的文件中以注释的形式编写测试描述。后来,我使用描述作为测试的名称。例如,

// a user can log in
// password is stored in the database

变成

function test_a_user_can_log_in() {
    // test code here...
}

function test_password_is_stored_in_the_database() {
    // test code here...
}

我一般都是改写句子,手动插入下划线,当然还有更好的办法

是否有某种正则表达式、sed 命令、shell 管道等可以自动执行此操作?

使用sed,你可以使用类似

的东西
sed '\|//|{ s/ /_/g; s|//|test|; s/$/ () \{\
  # test code here\
\}/; }' tmp.sh

这是我想出的

function generate_test_cases() {
        while read l; do
                echo $l
                # check if line is a comment
                if [[ $l == //* ]]
                then
                        echo $l
                        # remove //
                        l=${l:2}
                        # replace spaces with underscores
                        l=${l// /_}
                        # append to filename.test.bash
                        echo "function $l() { \n }" >> .test.bash
                        echo $l
                fi
        done <
}

另一个选项是 awk,您将测试第一个字段是否是 "//",如果是,则将记录作为带有注释正文的函数名写出,例如

awk '~/\/\// {
     = "test"
    gsub(/ /,"_")
    print "function "[=10=]"() {\n    // test code here...\n}\n" 
}' file

例子Use/Output

file 中输入您的示例,您将收到:

awk '~/\/\// {
>      = "test"
>     gsub(/ /,"_")
>     print "function "[=11=]"() {\n    // test code here...\n}\n"
> }' file
function test_a_user_can_log_in() {
    // test code here...
}

function test_password_is_stored_in_the_database() {
    // test code here...
}

使用 tr 而不是 sed 的替代想法:

假设您已经阅读了要转换为变量 line 的行,即变量包含类似

的内容
line='// a user can log in'

您可以通过

在bash中生成函数header行
echo "function test$(tr ' ' _ <<<"${line:2}")("

${line:2} 删除前两个字符 (//),tr 将每个 space 替换为下划线。

作为一项安全措施,我会不会就地编辑文件。如果您在替换程序中犯了任何错误,您可能会得到损坏的文件。如果生成的文件确实应该与原始文件同名,请让您的转换器脚本创建一个备份副本,并处理此备份以覆盖原始文件。