检测代码是否读取指定的输入文件

时间:2016-09-12 09:52:20

标签: linux file io

我正在编写一些自动化测试来测试代码并向程序员提供反馈。

其中一个要求是检测代码是否已成功读取指定的输入文件。如果不是 - 我们需要相应地向用户提供反馈。检测此问题的一种方法是atime时间戳,但由于我们的服务器驱动器使用relatime选项挂载 - 我们没有为每个读取的文件获取atime次更新。更改此选项以记录每个atime是不可行的,因为它会显着减慢我们的I / O操作。

我们可以使用任何其他替代方法来检测给定代码是否确实读取了指定的输入文件?

2 个答案:

答案 0 :(得分:1)

这是一个疯狂的想法:在某些时候拦截读取呼叫。其中一种可能的方法或多或少是这样的:

  1. 该程序通过抽象进行所有阅读。例如,MyFileUtils.read(filename)(自定义)而不是File.read(filename)(stdlib)。
  2. 在正常操作期间,MyFileUtils只是将工作委托给File(或您使用的任何系统内置库/调用)。
  3. 但是在测试中,MyFileUtils被替换为一个特殊的测试版本,该版本与委派一起也会报告框架的使用情况。
  4. 请注意,在某些环境/语言中,可能会直接将代码注入File,并且不需要抽象。

答案 1 :(得分:0)

我同意塞尔吉奥:触摸文件并不意味着它已被成功阅读。如果你想真的“确定”;那些程序必须“发送”某种指示。当然,有很多选择可以做到这一点。

一种务实的方式可能是:假设正在测试的那些程序创建日志文件;您的“测试监视器”可以检查日志文件是否包含固定条目,例如“读取xyz PASSED”或类似的东西。

如果您的“受测试代码”没有创建日志文件;也许:考虑改变它。