1

私はCodeIgniterを使用していくつかのプロジェクトを開発しており、SimpleTestで単体テストとWebテストを記述しています。私のテストは決定論的ではないことに気づきました。つまり、時間内に異なる出力を生成します。確率変数などに依存せず、厳密に決定論的である必要があるテストケースを意味します。

テストは互いに影響し合っているように見えます。多くの場合、すべてがうまくいくと、100のテストに合格したとしましょう。しかし、失敗する新しいテストメソッドを作成すると、他のいくつかのテストも失敗します。しかし、失敗したテストケースの問題を修正し、テストスイート全体を2〜3回再実行した後、スイート全体が再び合格することがよくあります。

これは一般的にWebTestCasesで発生します。

何が問題になるのか分かりますか?

共有されているクラス変数などは変更しません。

SimpleTestのコードを一瞥しました(多かれ少なかれ、フロー全体をすばやく分析するのは大きなことです)。さまざまなテストを起動する前に、ブラウザーのインスタンスが再作成されているようです。

最も奇妙なことは、再実行後、いくつかのエラーが消え、最後にすべてのエラーが消えることです。これに関係するキャッシュはありますか?

ウェブサイト上のAPIを除いて、ウェブ上のSimpleTestに関するドキュメント/ブログエントリ/フォーラム投稿は実際にはあまりないので、ヒントに感謝します。

4

2 に答える 2

0

それがあり得るもの:

  • キャッシング-チェーンのどこかに悪い結果をキャッシングしていますか?
  • 誤解-あなたは正しいことをテストしていると確信していますか?
  • 不正なデータ-データベース上でこれをテストしていて、障害によってデータベース内のデータが破損した場合は、前述のような結果が表示されることがあります。
于 2010-12-27T15:25:01.063 に答える
0

(編集:回答を別の投稿として移動しました)

ええと、私はかなり徹底的な調査をしました、そして、SimpleTestライブラリにバグがあるようです。

それらはfsockopen接続を開くために使用し、次にを介して要求を送信し、fwrite次にソケットから誤って応答をフェッチします。つまり、ソケットから0バイトを読み取る可能性がありますが、サーバーがビジー状態になり、後でデータを送信する可能性があるため、読み取りが途中で終了するため、完了していません。そうすれば、応答全体を読み取るのではなく、部分的な応答に対してのみテストを実行するため、失敗します。

于 2011-09-21T12:03:06.020 に答える