文件测试testCast
采用文件读写办法进行样例测试以及生成各种测试用例
写OJ调试的时候如果输入数据比较多,每次调试手动输入会很麻烦,把测试数据写到文件里用文件输入会比较方便。本次主要用freopen
进行文件读取
freopen
参考
https://blog.csdn.net/u013480600/article/details/18372341
头文件
首先必须知道调取freopen
必须用到头文件cstdio
或者 stdio.h
函数声明
1 | FILE * freopen ( const char * filename, const char * mode, FILE * stream ); |
使用方法
因为文件指针使用的是标准流文件,因此我们可以不定义文件指针
使用
freopen()
函数以只读方式r(read)打开测试样例文件in.txt
1
freopen("in.txt", "r", stdin);
以写入方式w(write)打开输出文件
out.txt
1
freopen("out.txt", "w", stdout);
不再需要修改输入和输出,而是维持代码的原样就可以了。因为freopen()函数重定向了标准流,使其指向前面指定的文件。
- 使用
fclose
关闭输入文件和输出文件
1 | fclose(stdin); |
注意:
- 最好使用扩展名为
.txt
,因为它最稳定 注意文件的路径
一定要用
fcolse
关闭,否则下次继续读取或写入数据的时候很有可能出错.in.txt
必须已经创建,out.txt
不需要,无则—-系统会自动创建,有则—-原来文件中的内容会被全部更新。
模板
1 |
|
测试样例生成
工具:
https://github.com/luogu-dev/cyaron
该文件需要python环境,详细看README.md
一个生成样例python代码
1 | #!/usr/bin/env python |
文件对比
有时候需要对比一下找出一些错误,例如:
已知测试样例文件testcase.txt
,正确代码输出文件true.txt
,测试代码输出文件test.txt
在linux下可以使用diff
命令对比
1 | diff(选项)(参数) |
- 选项
1 | -<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用; |
- 参数
- 文件1:指定要比较的第一个文件;
- 文件2:指定要比较的第二个文件。
例如上例:
diff test.txt true.txt -y
然后就可以知道哪个测试样例出错了。
其他系统可以自行查找工具。
多次对比
有时候可能一次测试的样例不错,我们需要不断生成测试样例,但是如果一次性生成过多会造成查找以及对比麻烦,所以一次性最好不要生成太多测试样例。
最好办法是多次生成不同的测试样例。
举例,有下列文件:
1 | 生成测试样例规则:ceate.py |
- 我们可以先生成测试样例
testcase.txt
1 | python ceate.py |
- 编译两个cpp文件
1 | g++ -o true true.cpp |
- 运行文件
1 | ./true |
这样就就生成了两个输出文件,一个是正确的true.txt
,一个测试的test.txt
,然后我们就可以使用dif
工具对比。接着,再次进行生成测试样例并且测试
- 再次生成测试样例
1 | python ceate.py |
- 这次我们只需要
1 | ./true |
就可以重新运行并且生成新的输出文件,然后就再对比,如此循环