我正在训练TDD方法,但我遇到了问题。如何测试IO操作?到目前为止我使用过junit,但我读到它不应该用于测试外部源(数据库,文件......),那么更好的是什么?抱歉我的英文不好
答案 0 :(得分:1)
您无法测试这些外部来源的内部工作情况,但您可以查看结果。
例如,写入文件:
开始测试
将要写入的数据存储在变量中 将数据写入文件
阅读文件
检查数据是否与您存储的数据相同 结束测试
测试是关于验证最终结果,所以你“失去”过程的一部分并不一定是坏事。通常,您可以假设外部源(库,IO ..)已经过充分测试。
答案 1 :(得分:1)
更改您的API以传递InputStream
和/或OutputStream
,并让您的jUnit代码通过ByteArrayInputStream和ByteArrayOutputStream
,您可以轻松设置/读取。
当然,您的生产代码需要更改为,但您通常可以通过简单的重构来实现;将API保持原样,但让公共方法调用重构方法,例如:
更改
public void read(File file) {
// do something with contents of file
}
到
public void read(File file) {
read(new FileInputStream(file));
}
// test this method
public void read(InputStream inputStream) {
// do something with contents of inputStream
}