問題タブ [nunit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unit-testing - NUnit [TearDown]が失敗します-どのプロセスが私のファイルにアクセスしていますか?
最終編集:問題の解決策を見つけました(質問の下部にあります)。
私は悲しみを引き起こしているNunitの問題を抱えています。編集:実際にはSQLiteの問題のように見えますが、まだ100%確実ではありません。
私のTestFixtureには、各テストでSQLiteデータベースとして使用されるランダムなファイル名を生成する設定があります。
私の各テストでは、データベースにアクセスする各メソッドでこの構成を使用しています。
そのため、1つのヘルパーメソッドConnect()
がすべてのメソッドで使用されます。using() { }
コンストラクトがDispose()
最後に接続を呼び出しTestMethod()
、SQLiteデータベースファイルへの接続を解放していると想定しています。
私が抱えている問題は、[TearDown]メソッドにあります。
すべてのテストで例外が発生します。
[TearDown]に到達すると、すべてのテストが失敗するため、一時的なデータベースファイル(テストごとに1つ、それぞれ異なる名前)でいっぱいのディレクトリと、失敗したテストがたくさんあります。
どのプロセスがファイルにアクセスしていますか?2番目のプロセスがファイルにアクセスする方法がわかりません。はconnection
完全にスコープ外になり、ファイルを削除しようとしている時点でDispose()されているため、SQLiteに関連するものにすることはできません。それをできる?
すべてのテストを実行した場合、または1つのテストだけを実行した場合でも、同じ結果が得られることに注意してください。
更新:それで、DbCommandオブジェクトのDispose()も試していませんでした(DbConnectionをDispose()する他のすべてのADO.NETプロバイダーもその接続上のコマンドをDispose()すると仮定しました) 。)これで、次のようになります。
違いはありませんでした。File.Delete()行は引き続きIOExceptionをスローします。:-(
[TearDown]でその1行を削除すると、すべてのテストに合格しますが、大量の一時データベースファイルが残ります。
別の更新: これは問題なく機能します:
理解できない!
更新:解決策が見つかりました:
デバッガーを介して単体テストを実行しましたが、[TearDown]
メソッドが開始されると、SQLiteDbConnectionへの参照はなくなりました。ただし、GCを強制するとそれらをクリーンアップする必要があります。SQLiteにバグがあるはずです。
unit-testing - UnitTestをしばらくすると自動的に失敗させる方法は?
私はNUnit(2.4.6)を使用しており、ビルド/テストナイトはTeam City 4で行われます。TeamCityに連絡しましたが、すでにこれを処理できないと言われています。だから、ここにいます。
私が欲しいのは、いつものようにテストを行うようにテストを設定することですが、ハングアップした場合...不明な理由で(これが発生する可能性があります...)...続行したくないが失敗する。これが必要なのは、ビルドナイトが完了したことに気づき、テストが到着すると、テストが一晩中ハングアップするためです。
どうしますか?
Nunit 2.5(ベータ)にはMaxTime属性があることを知っていますが、アップグレードして800ユニット以上のテストを実行する必要があります...このベータバージョンにアップグレードしなくても、テスト全体で何かが必要です。
unit-testing - 失敗した単体テストにどのように対処しますか?
単体テストが記述されたソリューション ファイルに多数のプロジェクトがあり、それらを継続的インテグレーション サーバーで実行できるように設定したいと考えています。ただし、テストの多くは適切に作成されておらず、定期的に実行されていないため、多くのテストが失敗しています。
現時点では、すべてのテストを修正する時間はありませんが、既存のテストを実行することには価値があると信じています。失敗した単体テストに対処する最善の方法は何ですか?
私が現在行っていることは、失敗した各テストを Explicit としてマークし、TODO コメントを残すことです。
これを行うより良い方法はありますか?それとも、CIS によって実行されるテストに含める前に、すべてのテストを修正する必要がありますか?
unit-testing - ExpectedException 属性のない nUnit で例外を予期する
パラメータが null の場合は常に ArgumentNullExceptions と ArgumentExceptions をスローすることで、不正な入力から保護されている複数のパラメータを持つメソッドがあります。
したがって、これをテストするには 2 つの明白な方法があります。
- [ExpectedException] 属性を使用して、パラメーターごとに 1 つのテスト
- 複数の try{} catch ブロックを使用して、すべてのパラメーターに対して 1 つのテストを行う
try catch は次のようになります。
ちょっとした問題で。テストに合格した場合、Assert.Fail は呼び出されないため、カバーされていないテスト コードとして (NCover によって) 強調表示されます。
テスト コードではなく、100% カバーしたいビジネス コードであるため、これは実際には問題ではないことはわかっています。複数の Exception スロー呼び出しをデッド LoC なしで 1 つのテストケースに圧縮する方法があるかどうか、まだ興味がありますか?
msbuild - ReSharper のテスト ランナーがいつプロジェクトをビルドしているかを知ることはできますか?
MSBuild NUnit コミュニティ タスクを使用して各ビルドで強制的にテストを実行しようとしていますが、ReSharper のテスト ランナーを使用してプロジェクトをビルドすると、テストを 2 回実行していることがわかります。機能しますが、実際には望ましくありません。
とにかくテストランナーがテストを実行することがわかっている場合にコミュニティタスクをスキップできるように、MSBuild 内でチェックできる変数または条件を知っている人はいますか?
注: 私は VS2008 を使用しており、MSBuild スクリプトはソリューション/プロジェクト ファイルに統合されています。私はすべての世界で最高のものを望んでいます。 CTRL+ SHIFT+ B、プラス コマンドライン、プラス CI サーバー。
build - 開発マシンとビルド サーバーの環境の違いをどのように補正しますか?
NUnit はマシンの "C:\Program Files\NUnit 2.4.8\" にインストールされていますが、統合サーバー (CruiseControl.Net を実行) では "D:\Program Files\NUnit 2.4.8\" にインストールされています。 . 問題は、タスクでパス「C:\Program Files\NUnit 2.4.8\bin\NUnit.Framework.dll」を使用して「 NUnit.Framework.dll' アセンブリですが、この同じビルド ファイルは統合サーバーでファイルをビルドできません (参照パスが異なるため)。統合サーバーと同じ場所に NUnit をインストールする必要がありますか? この解決策は私には制限が多すぎるようです。もっと良いものはありますか?この種の問題の一般的な解決策は何ですか?
.net - NUnit "ファイルまたはアセンブリ 'MyTestProject' を読み込めませんでした
ビルド サーバーとして実行する新しい 64 ビット マシンをセットアップしています。NUnit テスト アセンブリを NUnit GUI にロードしようとすると、次のエラーが発生します。
明らかな欠落はなく、すべての依存関係が存在するようです。すべての DLL は x86 プラットフォーム用にコンパイルされています。
NUnit 2.4.7 の使用。2.4.8 にアップグレードしようとしましたが、同じエラーが発生します。
System.IO.FileNotFoundException: ファイルまたはアセンブリ 'MyTestProject' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
System.IO.FileNotFoundException...
.net - Windows フォームの Visual Studio 単体テスト
ここでは、Visual Studio 2008 でプロジェクトに取り組んでいます。これに付属している組み込みのテスト スイート (Microsoft.VisualStudio.TestTools.UnitTesting 名前空間) を使用しています。非常に残念なことに、非常に多くの複雑さ (したがってエラー) が UI レイヤーにコード化されていることがわかりました。単体テストはビジネス レイヤーを適切にカバーしますが、UI レイヤーは常に苛立たしいものです。理想的には、それも単体テストしたいと考えています。ビジュアルスタジオでそれを行うための優れた「Microsoft互換」の方法を知っている人はいますか? nUnitFormsのような単体テスト フレームワークを Microsoft のものと「混合」すると、ある種の競合が発生しますか? 単体テスト フォームで注意すべき明らかなクマのわなはありますか?
java - API でエクスポートせずに nunit テストを作成する
私は、nunit (および一般的な Java 開発) を使用した単体テストは初めてです。クラスのプライベート メソッドの単体テストを作成する場合、テスト ファイルはテスト対象のクラスと同じパッケージ内にある必要があるように見えます。単体テストの API のエクスポートを回避する一般的な方法は何ですか? クラス/テスト メソッドをパッケージ保護することはできますか? それとも、開発者は通常、単体テスト ファイルを除外したリリース用の別のビルドを持っていますか?
.net - DBトランザクションで単体テストを自動的にラップしますか?
[編集 (Haren):複製]
NUnit 統合テストを DB トランザクションで自動的にラップして、テストによって行われた変更がテストの終了時に自動的にロールバックされるようにする方法を探しています。理想的には、特定のテスト メソッドを、テストの開始時に NUnit にトランザクションを作成させ、テストの終了時にロールバックさせるカスタム属性で装飾します... 属性を記述できますが、どこに追加すればよいかわかりませんそれのチェック。
テスト DB のサイズは 3 GB であるため、各テストの開始時に復元することはできません。各テストの本文で手動でトランザクションを作成できることはわかっていますが、もっとエレガントなものを探しています。
おそらく、これを実行できる IL 書き換えツール (おそらく AOP フレームワーク) があるでしょうか? 誰にも提案はありますか?