我正在用C语言编写一个程序,试图创建一个自动化测试程序。将会派生一个进程,它的输入/输出通道(stdin、stdout和stderr)将被重定向到“黑盒测试模块”中。 假设有一个简单的程序,涉及两个数字的乘法。在这种情况下,要测试的程序如下:
#include<stdio.h>
int main()
{
int a, b, numTc, i = 0; //numTc being the number of test cases
scanf("%d",&numTc);
for(;i < numTc; i++)
{
scanf("%d%d",&a,&b); //Facing issue here
printf("%d\n",a*b);
}
}
黑盒测试模块首先将此程序的I/O通道重定向到管道,然后使用write()
系统调用先写入测试用例数量,然后是测试用例本身。
我面临的问题是: 像上面标记的第二个scanf会停顿。如果我构造整个输入缓冲区并在附加"\n"后将其写入管道,则一切正常运行。
但是,我想逐个实现功能。
以下是黑盒模块的逻辑:
- 从数据库中读取总测试用例数
- 构造一个输入缓冲区,其中所有测试用例都以空格分隔,并以换行符结尾。
- 将此缓冲区写入待测试进程的stdin
- 等待被测试进程输出。
以上工作正常。但是黑盒模块应该能够逐个编写测试用例。
for (i = 0; i < numTx; i++)
,而不是在单独的声明中进行循环控制初始化。在C99中(你必须使用它,因为你没有从main()
显式返回值),你可以写成for (int i = 0; i < numTc; i++)
。 - Jonathan Leffler