6

今朝、テストを実行しましたが、2つの失敗があります。しかし、私は数日間コードを変更しておらず、すべてのテストに合格していました。

Gitによると、変更はありません(テスト出力であるcoverage.dataを除く)。gitkは他の変更を示していません。

Gitはコードがいつ変更されたかをどのように知るのですか?これはSSDの障害/エラーが原因である可能性がありますか?

何が起こったのかを理解するための最良の方法は何ですか?

編集:ユニットテストフレームワークを使用したRubyonRailsでの作業。

4

3 に答える 3

10

まず、テストが失敗した理由を理解することから始めます。これにより、テストが以前にどのように合格したかについての手がかりが得られる可能性があります。タイミングの問題、断続的な障害、テストハーネスの外部の問題、データの変更、日付や時刻の変更など、さまざまな問題が発生する場合があります。

于 2011-10-31T15:47:41.000 に答える
9

マイクがあなたの問題を見つけたようです(小さな回答ボックスをチェックしてください)。

はい、Gitが知らないうちにコードが変更される可能性があります。失敗の原因となったファイル(おそらく一時的なテストファイルまたはフィクスチャ)は、.gitignoreまたは.git / info/excludeのいずれかで無視できます。agit clean -dxfを実行すると、gitに認識されていないものがすべてチェックアウトから消去されます。 git status --ignoredgitによって無視されたファイルが表示されます。その場合は、テストランナーの一部としてより適切なテストクリーンアップを追加する必要があります。

後世のために、gitに表示されるコード変更がない場合にテストが失敗する可能性のある方法の短いリストを次に示します。

  • 「一時的な」テストファイルとフィクスチャが汚れている可能性があります。
  • 「一時的な」データベースとテーブルが汚れている可能性があります。
  • 時間や日付に敏感です。
  • ネットワークリソースを使用し、それらが変更されました。
  • コンパイラが変更されました。
  • 使用されているインストール済みライブラリが変更されました。
    • ライブラリが使用するライブラリが変更されました。
  • カーネルが変更されました。
  • 使用されているサーバー(データベース、Webサーバーなど)が変更されました。
  • 並列処理を使用しており、微妙なバグが発生するのはたまにしかありません。
  • ディスク(または一時ファイルが保存されるファイルシステム)がいっぱいです。
  • ディスク(または一時ファイルが移動するファイルシステム)が壊れています。
  • メモリ/ディスク/プロセス/ファイルハンドルのクォータが削減されました。
  • マシンのメモリが不足しています。
  • マシンのファイルハンドルが不足しています。
  • ランダムに生成されたデータとバグをくすぐるいくつかを生成したフィクスチャを使用します。
于 2011-10-31T23:11:47.747 に答える
2

とにかくリポジトリファイルを取得できるようにするにはログを取得する必要があるため、Gitがリポジトリを認識し、どこかにログを記録しない限り、リポジトリに変更を加えることはできません。テストと同時に実行されるべきではないマシン上の何かが原因で障害が発生していないか、または予期しない競合状態である可能性があるかどうかを確認します。

于 2011-10-31T16:01:00.063 に答える