問題タブ [dunit]
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.
delphi - FinalBuilder と AQTime を使用して DUnit テスト カバレッジ統計を取得する
大規模な Delphi プロジェクト (150 万行のコード) があり、アジャイル プロセスの使用に移行しています。
継続的インテグレーション環境 (FinalBuilder) は既にありますが、これを更新して、開発チームの全員に電子メールで単体テスト (dUnit) とコード メトリック (CodeHealer) を含めました。私たちの単体テストのカバレッジはあまりよくないので、すべてのビルドでテスト カバレッジの結果を得るために、AQtime をミックスに入れようとしています。
「プログラムの実行」タスクを使用して単体テストの実行可能ファイルを実行し、結果をログに記録し、その後ファイルを解析しています。「スクリプトの実行」タスクを使用して (COM 経由で) AQtime を実行し、結果を XML にエクスポートして、それらの結果を解析できるようにします。
私が抱えている問題は、単体テスト実行可能ファイルを実行している AQtime にあり、単体テスト実行可能ファイルを直接監視する機能を失います。FinalBuilder に両方のタスクの結果を解析させたいと思います。AQtime から呼び出されたときに dUnit の結果にアクセスする方法を知っている人はいますか?
delphi - 新しいユニットを持っていると、なぜ「ユニットを使用する」が消えるのですか?
DUnitフレームワークを使用したアプリケーションの単体テストプロジェクトがあります。$IFDEF
このプロジェクトには、GUIまたはコマンドラインの代わりにxmlファイルでテスト結果を出力するためにで囲まれたユニットがあります。XML_OUTPUT定義は、ビルド構成を切り替えることで有効になります。
これは完全に機能します。この問題は、IDEからこのプロジェクトに新しいユニットを追加するときに始まります([ファイル]>[新規]>[ユニット]の新しいユニット)。
テストプロジェクトは現在:
ご覧のとおり、テストXML_OUTPUTが消えました...ユニットを追加するたびに、DelphiIDEはこのテストを削除します。
なぜそしてどうやってそれを避けることができるか知っていますか?
unit-testing - モックオブジェクトを使用するときに、単体テストで実装の内部に関する知識が必要になるのを防ぐにはどうすればよいですか?
私はまだユニットテスト、特にモックに関して学習段階にあります(私はPascalMockとDUnitフレームワークを使用しています)。私が今つまずいたことの1つは、テストされたクラス/インターフェイスの実装の詳細を単体テストにハードコーディングする方法が見つからず、それが間違っていると感じたことです...
例:アプリケーション設定(基本的には名前と値のペア)を読み書きするための非常に単純なインターフェイスを実装するクラスをテストしたいと思います。コンシューマーに提示されるインターフェイスは、値が実際に保存される場所と方法(レジストリ、INIファイル、XML、データベースなど)に完全に依存しません。当然、アクセスレイヤーは、構築時にテストされたクラスに注入されるさらに別のクラスによって実装されます。このアクセスレイヤーのモックオブジェクトを作成しました。これで、レジストリ/ INIファイルなどを実際に読み書きすることなく、インターフェイス実装クラスを完全にテストできるようになりました。
ただし、テストされたクラスがアクセスしたときにモックが本物とまったく同じように動作することを確認するには、単体テストで、テストされたクラスが期待するメソッド呼び出しと戻り値を非常に明示的に定義して、モックオブジェクトを設定する必要があります。つまり、アクセスレイヤーのインターフェイスや、テスト対象のクラスがそのレイヤーを使用する方法を変更する必要がある場合は、インターフェイスであっても、そのインターフェイスを内部的に使用するクラスの単体テストも変更する必要があります。私が実際にテストしているクラスの一部はまったく変更されていません。これは、モックを使用するときに私が一緒に暮らさなければならないものですか、それともこれを回避するクラス依存関係を設計するためのより良い方法がありますか?
delphi - Delphi 2007以降でDUnitを使用するための概要はどこにありますか?
単体テストの使用と記述は初めてですが、単体テストを使用すると、より良いコードを記述し、最終的に時間を節約できると確信しています。DUnitがDelphi2006以降にうまく統合されていることを理解しています。
DUnitを使用して単体テストを作成するための優れたリソースと、おそらく単体テストの概要を知っている人はいますか?
読んでいるCharlieCalvertのリソースを見つけましたが、私は動画のような人で、DUnitテストに関連するビデオも見たいです(存在する場合)。どんな助けでも大歓迎です。
delphi - プログラムで名前で DUnit テストを無効にするにはどうすればよいですか?
統合テストのために、サードパーティ コンポーネント (メッセージ ブローカー) のすべてのバージョンに対して 1 回実行される DUnit テスト スイートを作成しました。残念ながら、テスト対象のコンポーネントの一部のバージョンに既知のバグがあるため、一部のテストは常に失敗します。
これは、テスト スイートが 100% で完了することは決してないことを意味します。ただし、自動テストの場合は、100% の成功スコアが必要です。DUnit は、テスト スイート内のテストを名前で無効にする既製の方法を提供していません。
delphi - Delphi 2007 のバージョン情報が Exe にない
Delphi 2007 プロジェクトがあり、Project->Options->'Version Info' を設定しようとしています。フォームに値を入力し、プロジェクトを保存します。ただし、ビルドすると、生成されたexeには、入力したバージョン情報が含まれていません。実際には、ファイル バージョン、言語、および製品バージョンのみが含まれます。内部名、製品名などの他の値は含まれません。
値が .dproj ファイルに保存されないことに気付きました。だから私はそれらを上記のファイルのxmlに手動で入力し、保存してビルドしようとしました。繰り返しますが、exe のバージョン情報は不完全です。
バージョン情報 (Windows の場合) とは、exe を右クリックしてプロパティを選択し、[バージョン] タブをクリックしたときに表示されるものを意味します。
編集: おそらく、これは DUnit を使用したテスト プロジェクトであることにも言及する必要があります。
誰にもアイデアはありますか?
delphi - ハドソンのdunitテスト結果メッセージ
Delphi2010プロジェクトのCIサーバーとしてHudsonを使用しています。XMLTestRunner.pasユニットは、DUnitテスト結果をxmlファイルに書き込みます。このファイルは、hudsonxUnitプラグインがテスト結果を報告するために使用します。xUnitプラグインは失敗を表示しますが、メッセージは表示しません。
「テストツールの結果レポートの公開」のハドソンプロジェクト構成で、リストにdunitオプションがなく、xmlファイルがnunit形式に似ているため、テストツールとして「NUnit-バージョンN / A(デフォルト)」を選択します。
ハドソン構成には「カスタムツール」オプションもあり、「カスタムスタイルシート」を指定する必要がありますが、そのようなスタイルシートの書き方がわかりません(ドキュメントはありますか?)。
ブーストテストを使用したC++プロジェクトでは、すべてのメッセージで障害が適切に報告されます。
delphi - CheckException は、パラメーターが 0 のメソッドのみを受け入れます。他のメソッドが例外をスローすることをテストするにはどうすればよいですか?
dunit で例外をテストするためのベスト プラクティスは何だろうと思っています。私は Delphi のメソッド ポインタにあまり詳しくありません。引数なしで呼び出すことができるように、引数をメソッドポインタにバインドする可能性はありますか? 現時点では、この「バインド」を手動で行う追加のメソッドを常に作成しています。SUT に多くのスロー メソッドがある場合、これは煩わしくなります。
delphi - TTestSetupクラスのTTestCaseのフィールドにアクセスする方法
DUnitを使用して単体テストを作成しています。初期化にかなり時間がかかるクラスがあります。
TTestSetupからクラスTMyTestSetupを派生させ、そのSetupメソッドをオーバーライドします。このSetUpメソッドは、TTestCaseのすべてのテストに対して1回だけ呼び出されます。パフォーマンスを向上させるために、初期化プロセスをTMyTestSetup.SetUpルーチンに入れました。
私の問題は、初期化するオブジェクトにアクセスするにはどうすればよいですか。これは、TestSetupクラスのTMyTestのフィールドです。それをグローバルに宣言する唯一の方法はありますか?
テストされていない短い例: