6

今天早上我进行了测试,有 2 次失败。但是我几天没有更改任何代码,所有测试都通过了。

根据 Git,没有任何变化(除了 coverage.data,它是测试输出)。gitk 没有显示其他变化。

Git 如何知道代码何时更改?这可能是由 SSD 故障/错误引起的吗?

弄清楚发生了什么的最好方法是什么?

编辑:使用单元测试框架在 Ruby on Rails 中工作。

4

3 回答 3

10

我首先要弄清楚测试失败的原因,这可能会为您提供一些关于它们以前如何通过的线索。有时这是一个时间问题、间歇性故障、测试工具之外的东西、数据更改、日期或时间的更改,等等。

于 2011-10-31T15:47:41.000 回答
9

我看到迈克找到了你的问题(请在小答案框中打勾)。

是的,代码有可能在 Git 不知情的情况下更改。导致失败的文件,可能是临时测试文件或夹具,可以在 .gitignore 或 .git/info/exclude 中被忽略。执行 agit clean -dxf将清除结帐中 git 不知道的任何内容。 git status --ignored将显示被 git 忽略的文件。如果是这种情况,您希望在测试运行程序中添加更好的测试清理。

对于后代,这是测试可能失败的简短列表,而 git 没有可见的任何代码更改:

  • “临时”测试文件和固定装置可能很脏。
  • “临时”数据库和表可能很脏。
  • 它对时间或日期很敏感。
  • 它使用网络资源并且它们发生了变化。
  • 编译器已更改。
  • 使用的已安装库已更改。
    • 库使用的库已更改。
  • 内核已更改。
  • 使用的任何服务器(数据库、Web 服务器等)都已更改。
  • 它使用并行处理,有时只会出现细微的错误。
  • 磁盘(或临时文件所在的文件系统)已满。
  • 磁盘(或临时文件所在的文件系统)已损坏。
  • 您的内存/磁盘/进程/文件句柄配额减少了。
  • 机器内存不足。
  • 机器已用完文件句柄。
  • 它使用带有随机生成数据的固定装置,并生成了一些可以解决错误的固定装置。
于 2011-10-31T23:11:47.747 回答
2

如果 Git 不知道它并将其记录在某处,则您的存储库无法进行任何更改,因为无论如何都需要检索日志才能获取 repo 文件。我会检查一下,这些故障不是由机器上不应该与测试同时运行的东西引起的,或者它可能是你没有预料到的竞争条件。

于 2011-10-31T16:01:00.063 回答