Bash 用于测试程序的脚本
Bash script for testing a program
这是一个简单的字符串反转程序。
void str_reverse(const char*, size_t, char*, size_t);
int main(){
char str[256];
while(fgets(str, 256, stdin)){
if(strncasecmp(str, "quit", 4) == 0) break;
size_t size_reversed = strlen(str) * sizeof(char);
char* reversed = malloc(size_reversed);
str_reverse(str, sizeof(str), reversed, size_reversed);
printf("Orginal String : %s\n", str);
printf("Reversed String : %s\n", reversed);
printf("__________________________________\n");
free(reversed);
}
return 0;
}
void str_reverse(const char* str1, size_t size1, char* str2, size_t size2){
memcpy(str2, str1, size1);
char temp;
size_t len = strlen(str2) - 1;
size_t stop = len/2;
size_t i,k;
for(i = 0, k = len; i < stop; i++, k--)
{
temp = str2[k];
str2[k] = str2[i];
str2[i] = temp;
}
//return str;
}
我正在尝试编写一个 bash 脚本来自动编译和测试该程序。我有以下测试用例:
- 普通字符串,
- 空字符串,
- 数字,
- 混合案例
谁能帮我开始做这件事。谢谢
也许是这样的:
#!/bin/bash
gcc source -o xname
echo "teststring" | ./xname
echo "teststring2" | ./xname
...
您可以使用 BATS 进行自动化测试。这是自动化测试的好工具。
添加必要的包含文件后,
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
您可以使用如下脚本,
#!/bin/bash
# Compile reverse.c
make reverse
# Declare and feed test strings
declare -a string_array=("" "string" "12345" "string STRING")
for str in ${string_array[@]}
do
echo "$str" | ./reverse
done
我会更改程序以接受要反转的字符串作为命令行参数,然后打印反转后的字符串作为输出。然后,使用 bash 脚本将程序的输出与预期输出进行比较。
int main(int argc, char* argv[]){
if ( argc != 2 )
{
fprintf(stderr, "Expect to see one argument.\n");
return EXIT_FAILURE;
}
char* str = argv[1];
size_t size_reversed = strlen(str) * sizeof(char);
char* reversed = malloc(size_reversed+1);
str_reverse(str, strlen(str), reversed, size_reversed);
printf("%s\n", reversed);
free(reversed);
return EXIT_SUCCESS;
}
和 bash 脚本:
#!/bin/bash
function test_program()
{
in=""
expected_out=""
out=$(./program "$in")
if [ "$out" != "$expected_out" ]
then
echo "output: $out"
echo "expected output: $expected_out"
echo "Test failed."
else
echo "Test passed"
fi
}
test_program "automate the compilation" "noitalipmoc eht etamotua"
test_program "compilation" "noitalipmoc"
test_program "abcd" "dcba"
这是一个简单的字符串反转程序。
void str_reverse(const char*, size_t, char*, size_t);
int main(){
char str[256];
while(fgets(str, 256, stdin)){
if(strncasecmp(str, "quit", 4) == 0) break;
size_t size_reversed = strlen(str) * sizeof(char);
char* reversed = malloc(size_reversed);
str_reverse(str, sizeof(str), reversed, size_reversed);
printf("Orginal String : %s\n", str);
printf("Reversed String : %s\n", reversed);
printf("__________________________________\n");
free(reversed);
}
return 0;
}
void str_reverse(const char* str1, size_t size1, char* str2, size_t size2){
memcpy(str2, str1, size1);
char temp;
size_t len = strlen(str2) - 1;
size_t stop = len/2;
size_t i,k;
for(i = 0, k = len; i < stop; i++, k--)
{
temp = str2[k];
str2[k] = str2[i];
str2[i] = temp;
}
//return str;
}
我正在尝试编写一个 bash 脚本来自动编译和测试该程序。我有以下测试用例:
- 普通字符串,
- 空字符串,
- 数字,
- 混合案例
谁能帮我开始做这件事。谢谢
也许是这样的:
#!/bin/bash
gcc source -o xname
echo "teststring" | ./xname
echo "teststring2" | ./xname
...
您可以使用 BATS 进行自动化测试。这是自动化测试的好工具。
添加必要的包含文件后,
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
您可以使用如下脚本,
#!/bin/bash
# Compile reverse.c
make reverse
# Declare and feed test strings
declare -a string_array=("" "string" "12345" "string STRING")
for str in ${string_array[@]}
do
echo "$str" | ./reverse
done
我会更改程序以接受要反转的字符串作为命令行参数,然后打印反转后的字符串作为输出。然后,使用 bash 脚本将程序的输出与预期输出进行比较。
int main(int argc, char* argv[]){
if ( argc != 2 )
{
fprintf(stderr, "Expect to see one argument.\n");
return EXIT_FAILURE;
}
char* str = argv[1];
size_t size_reversed = strlen(str) * sizeof(char);
char* reversed = malloc(size_reversed+1);
str_reverse(str, strlen(str), reversed, size_reversed);
printf("%s\n", reversed);
free(reversed);
return EXIT_SUCCESS;
}
和 bash 脚本:
#!/bin/bash
function test_program()
{
in=""
expected_out=""
out=$(./program "$in")
if [ "$out" != "$expected_out" ]
then
echo "output: $out"
echo "expected output: $expected_out"
echo "Test failed."
else
echo "Test passed"
fi
}
test_program "automate the compilation" "noitalipmoc eht etamotua"
test_program "compilation" "noitalipmoc"
test_program "abcd" "dcba"