【问题标题】:Is it possible for code to change without Git knowing about it?是否可以在 Git 不知道的情况下更改代码?
【发布时间】:2011-10-31 15:44:44
【问题描述】:

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

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

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

找出发生了什么的最好方法是什么?

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

【问题讨论】:

  • 既然今天失败了,看看是不是一个月最后一天的日期问题,尤其是31天。
  • 就是这样。在每月的最后一天失败。

标签: ruby-on-rails git unit-testing testing solid-state-drive


【解决方案1】:

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

【讨论】:

  • 是的,这是时间问题。计算 Date.today - 6.months + 6.months。在有 31 天的月份的最后一天失败! (我认为还有 8 月 29 日(非闰年)和 30 日)。
  • 是的,你说得对。当我在调试器下运行DateTime.Today.AddMonths(-6).AddMonths(6).ToShortDateString(); 时,我得到'10/30/2011' - 似乎当我减去 6mon 时,我会回到 4 月 30 日(因为 Apr 没有第 31 天),但是当我添加 6mon对此,我将在 10 月 30 日获得。我想这是有道理的。
【解决方案2】:

我知道 Mike 找到了你的问题(请在小答案框中打勾)。

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

对于后人,以下是在 git 不可见任何代码更改的情况下测试可能失败的简短列表:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2023-04-10
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多