如何从我的笔记中自动生成测试名称?
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 替换为下划线。
作为一项安全措施,我会不会就地编辑文件。如果您在替换程序中犯了任何错误,您可能会得到损坏的文件。如果生成的文件确实应该与原始文件同名,请让您的转换器脚本创建一个备份副本,并处理此备份以覆盖原始文件。
在编写测试用例之前,我经常在将成为测试用例的文件中以注释的形式编写测试描述。后来,我使用描述作为测试的名称。例如,
// 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 替换为下划线。
作为一项安全措施,我会不会就地编辑文件。如果您在替换程序中犯了任何错误,您可能会得到损坏的文件。如果生成的文件确实应该与原始文件同名,请让您的转换器脚本创建一个备份副本,并处理此备份以覆盖原始文件。