2011-04-20 6 views
13

私たちは、少数のライブラリプロジェクトからのテストが定期的に失敗している私たちのメインプロジェクトで、JetBrains TeamCityによる単体テストの奇妙な問題に直面しています。どうやら、それは設定ファイル(app.configから来て、きちんとプロジェクト - > bin-> debug-> projectName.dll.configに保存されています)を読んでいません。TeamCity - > NUnitフェーズでapp.configを読み込めないテストプロジェクト

本当の問題である可能性のあるヒントやヒントは高く評価されます。

答えて

20

私は同じ問題があり、何時間も無駄にしていました。問題は。我々の場合には

は、NUnitのプラグインはからテストを実行するように構成されました:

**\*Tests.dll 

これがOKであることを聞こえるが、それはこのパターンが唯一のMyTests.dll内に一致しないことが判明しましたbin \ Debugフォルダーだけでなく、obj \ Debug \ MyTests.dllにも移動します。 objフォルダはコンパイルのために内部的に使用され、設定ファイルは含まれません。

は最後に解決策は、私たちが「デバッグ」はハードコーディングされていなかったので、実際に私たちはビルド構成のためのシステム変数を使用し

**\bin\Debug\*Tests.dll 

にプラグインの設定を変更することでした。作業領域がデバッグ/リリースビルドにも使用されていて、完全なクリーンアップが指定されていない場合は、bin *を使用することも危険です。

なぜ私はテスト数の不一致を認識していないのでしょうか(実際にはbinから1回、objから1回走っていたので、実際には2倍になりましたが)、これは典型的なことです。すべて緑ですが、カウントについて設定に応じて最初のテストを導入したとき、1つの失敗(binからのものが通過していたため)が発生したため、重複は顕著ではありませんでした。

+0

それは本当に良い発見だったので、去年私を助けたにもかかわらず+1を与えなければならなかった – user446923

+3

これに加えて、私たちのプロジェクトは複数のテストDLLを持っていて、そのうちの1つは別のものを参照していました。これにより、参照されたdllは2回実行され、他のdllのフォルダにあったコピーには適切なapp.configエントリがありませんでした。適切な修正は、他のテストプロジェクトからすべての参照を削除することでした。 –

+0

@DMactheDestroyer - あなたはあなたのコメントを答えとして書くべきです。私はそれを最初に気付かず、それが必要な解決策になった。 – Jason

0

私はあなたがあなたの「単位」テストのための設定ファイルが必要な場合はたぶん、このリンクは:)

app.config for a class library

+0

私たちはすでに、テストプロジェクト(別の開発者向け)として別々のapp.configとuser.configを使用しています(2009年以降に実行しています)。その議論では、なぜそれが使えないのかについてはあまり説明されていない。 – user446923

-3

を助けることができる...のapp.configファイルは、クラスライブラリのために読まれていないことが最近学びましたあなたはそれを間違っている。適切なユニットテストでは、データベースやファイルシステムなどの設定やアクセスは必要ありません。テスト戦略を変更する必要があります。

開始点は、[Category("Integration")]注釈を使用して設定が必要なテストをマークし、このカテゴリを無視するようにTeamcityテストランナーを設定することです。次に、これらのリファクタリングに焦点を当てる必要があります。

+1

ヒントをありがとうが、私の質問は全く別の行にあります...なぜそれが設定ファイルを読んでいないのか尋ねる。 – user446923

+0

テストプロジェクトにはapp.configを使用できないという厳しい規則がありますか(統合テストの前提として、そのプロジェクトでは、設定ファイルのいくつかのキーを使用する統合テストはほとんどありません) 。リファレンスとして、このようなシナリオのための私のMarc G.の回答を確認してください。http://stackoverflow.com/questions/930585/app-configs-and-mstest-project-null-reference-for-a-connection-string – user446923

+5

私はいいえ、テストプロジェクトのためのそのようなルールがないと言うでしょう。しかし、理想的な状況で単体テストには必要ないはずです。しかし、テストプロジェクトは単なる単体テスト以上のものでも、統合テストや合格テストがあっても構いません。これらのシナリオでは、コンフィギュレーションファイルを使用することは完全に正しいと思います。 –

1

私は同様の苦境

Thisが役立つかもしれない持っていました。さらにこれがうまくいかない問題がありました。関連する設定セクションを最高レベルの設定ファイルにコピーしてしまいました。 (つまり、Webアプリケーションの場合はWeb.Configにコピーします) - かなりクルージングですが、問題に関して数日を無駄にしてしまいました。

+0

返事Deanに感謝します。しかしちょっと混乱しました。私たちのapp.configは実際に出力ディレクトリにうまくコピーされていますが、全く読み込まれていません。我々は途中でNUnitを実行しています。私があなたの答えを途中で誤解したかどうか教えてください。ありがとう – user446923

5

TeamCity(v6.5.4)には独自のNUnitテストランナーがあり、それとNUnit GUIテストランナー(2.5.10)との間に矛盾があるようです。 NUnitのGUIテストランナーは、コンフィギュレーションファイル名が.config形式であることを予期している長い間の慣例に従います。これはNUnitでProject - > Editを見ればわかります。

TeamCityはapp.configを探しています。

次のオプションがありのいずれか:

  1. はApp.configファイルを指すようにNUnitのGUIを設定し、ソース管理における結果 NUnitのプロジェクトが含まれます。
  2. app.configと.config - の両方を手動で同期させます( )。
  3. ビルドプロセスにステップを追加して、.configを app.config(またはその逆)にコピーします。
14

Gaspar Nagy's accepted answerに加えて、プロジェクトに複数のテストDLLがあり、そのうちの1つが別のDLLを参照しているかどうかを確認してください。

これにより、参照されるdllは2回実行され、他のdllのフォルダにあるコピーには適切なapp.configエントリがありません。適切な修正は、他のテストプロジェクトからすべての参照を削除することです。

関連する問題