2012-03-22 94 views
2

我在写一个脚本,它从unix目录中获取最近修改过的文件。 我确定它可行,但我必须创建一个单元测试来证明它。Python,按特定顺序运行命令

问题是setUp函数。我希望能够预测文件中创建的顺序。

self.filenames = ["test1.txt", "test2.txt", "test3.txt", "filename.txt", "test4"] 
newest = '' 
for fn in self.filenames: 
    if pattern.match(fn): newest = fn 
    with open(fn, "w") as f: f.write("some text") 

的模式是“测试。*。TXT”所以它只是在列表中的前三个匹配。在多次测试中,最新有时会返回'test3.txt',有时会返回'test1.txt'。

+2

对我来说,这看起来不像单元测试。单元测试不涉及实际上将文件写入磁盘...... – 2012-03-22 18:01:21

+0

你说这个问题的方式有点含糊。此代码中的'newest'变量将始终引用列表'self.filenames'中的最后一项。或者这是一个关于你的脚本移动最近修改过的文件的行为的问题? – amcnabb 2012-03-22 18:16:30

+2

您正在尝试编写某种集成测试,而不是[单元测试](http://en.wikipedia.org/wiki/Unit_testing)。 – 2012-03-22 18:31:57

回答

5

使用os.utime在您创建的文件上显式设置修改时间。这样你的测试将运行得更快。

+0

哦,是的。这是一个。非常感谢。 – mehtunguh 2012-03-22 18:48:24

4

我怀疑你使用的文件系统是否支持文件创建时间的小数秒。

我建议您在循环中插入time.sleep(1)的调用,以便文件系统实际上在每个创建的文件上具有不同的时间戳。

+0

谢谢。你是对的。我甚至没有考虑给它们提供相同时间戳的文件系统。 – mehtunguh 2012-03-22 18:07:02

+0

我喜欢@ Lance-Helsten的答案,因为它不会让你的脚本停留几秒钟。 – gahooa 2012-03-22 18:11:06

0

这可能是由于同步。仅仅因为您按照特定顺序对文件调用write(),并不意味着操作系统将按照该顺序更新数据。

在转到下一个文件之前,请在文件对象上尝试调用f.flush()后跟os.fsync()。两次通话之间给予一段时间(使用sleep())也可能有所帮助