本人首先将“反转字符串”这个问题通过C++编程,然后设计测试用例,编写驱动模块进行测试(虽然与程序员测试自己的代码原则相冲突,但重点在于实践)。
其中将测试用例写入test.txt文件中,每个测试用例的下一行是期望测试结果(测试用例为空时除外),最后将测试结果存入testresult.txt文件中。
实现“反转字符串”的代码如下:
class Reverse
{
public:
void swap(char *begin, char *end)
{
if ((begin == nullptr) || (end == nullptr))
return;
char temp = *begin;
*begin = *end;
*end = temp;
}
char *reverse(char *queue,int length)
{
if ((queue == nullptr) || (length <= 0))
return 0;
int begin = 0;
int end = length - 1;
while (begin < end)
{
swap(&queue[begin], &queue[end]);
begin++;
end--;
}
return queue;
}
};
测试驱动模块代码如下:
void test()
{
FILE *fp,*result;
Reverse re;
fp = fopen("E:\\test.txt", "r"); //打开编写测试用例的文件
result = fopen("E:\\testresults.txt", "a"); //打开导出测试结果的文件
char buf[MAXSIZE]; //按行读取字符串,将测试用例存在buf数组中
char expresult[MAXSIZE]; //读取下一行字符串,为期望结果,存在expresult数组中
int len;
if ((fp = fopen("E:\\test.txt", "r")) == NULL) //检查文件是否正确打开
{
perror("fail to read");
exit(1);
}
if ((result = fopen("E:\\testresults.txt", "a")) == NULL)
{
perror("fail to read");
exit(1);
}
int i = 0;
while (fgets(buf, MAXSIZE, fp) != NULL) //循环读取测试用例
{
if (*buf == '\n') //当测试用例为空的情况
{
fputs("输入为空!\n", result);
continue;
}
fgets(expresult, MAXSIZE, fp); //读取期望结果
len = strlen(buf);
buf[len - 1] = '\0';
re.reverse(buf, len-1); //对字符串进行反转
for (i; i < len-1; i++) //将反转结果与期望结果一一比较
{
if (buf[i] != expresult[i]) //如果与期望结果不符合,将测试结果写入测试文档中
break;
}
if(i==len-1)
fputs("test success!\n", result);
else
fputs("test fail!\n", result);
}
}
文件test.txt中测试用例如下(此处没有设计非常长的字符串):
其中第一行为空。
文件testresult.txt中测试结果如下:
测试结果符合预期。