問題タブ [test-data]
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.
java - テスト データの作成: ドメイン ビルダー
基礎となるメモリ内データベースを使用してテスト用のテスト データを作成したいと考えています。一般的なアプローチは、いくつかのtest_data.sqlファイルを作成し、挿入を含むテスト オブジェクトを作成することです。そして、これらのオブジェクトを Java テストで参照します。
私はGrowing Object-Oriented Software, Guided by Testsで、テストは詳細に掘り下げる必要はないことを読みました。たとえば、テストで NEW ステータスの既存のユーザーが必要な場合、ユーザーを作成してすべてのフィールドに入力する必要はありません。しかし、彼は、新しいステータスのユーザーが必要であり、他のすべてのフィールドにデフォルト値を入力する必要があることだけを伝えるべきです。
したがって、次のようなヘルパー メソッドが必要です。
しかし、私のデータベーススキーマには多くのテーブルがあり、次のコードにたどり着きました:
ドマンクラス:
このコードは、ユーザー、契約 (ユーザーへの FK を使用)、2 つのアカウント (契約への FK を使用) を作成し、これらのエンティティを含む Domain オブジェクトを返します。
したがって、このコードを使用すると、基本的に特定のテストのテスト データを 1 行でセットアップできます。
このテスト データ生成アプローチには、SQL よりも次のような利点があります。
一部の列/制約が追加/削除された場合、すべてのテーブル列に固執するわけではありません。テストでテストデータの生成を変更する必要はありません。
SQL の方がより簡潔な方法です。テスト データを 1 行でセットアップできますが、SQL アプローチではオブジェクトごとに INSERT を記述する必要があります。
時間がかかりません。はい、最初にこのアプローチを使用し始めると、そのようなドメイン ビルダーの実装に時間を費やす必要がありますが、完了すると、多くの時間を節約できます。
集中オブジェクト作成。データベース スキーマが変更された場合、オブジェクト作成ロジックを 1 か所だけ変更する必要があります。
USER_WITH_NEW_STATUS_ID のような Java 定数に固執する必要はありません。
私の質問は:
誰かがこのアプローチに来て、これに使用するライブラリ/ツール/慣習は何ですか?
更新: いくつかのテスト タイプでこのようなアプローチを使用します。
リポジトリのテスト (例: リポジトリがオブジェクトを正しくフィルター処理する、またはオブジェクト リストを正しい順序で返す)。
ビジネス ロジック + データベース統合テスト (単体テストは優れていますが、ビジネス ロジックとリポジトリ ロジックが一貫していることを 100% 確認する必要がある場合もあります)
java - Hsqlは既存のデータベースからテストデータを作成します
インメモリ hsqldb の既存のデータベースを使用して複雑なテストデータを生成する方法を知っている人はいますか? したがって、私のjunitテストは正しいデータの一部を使用できるようになります。
具体的な問題は次のとおりです。
コードを変更したときに統合が機能することを確認するために、既存のプロジェクトの junit テストを作成する必要があります (通常のテスト プロセス)。ただし、既存のデータベースは既に存在します。他のコンポーネントにサービスを提供するだけなので、db からデータを提供するサービスを「ただ」持っています。
しかし、データベース全体を hsqldb にロードすると、メモリが大量に消費されます...そのため、テストできるデータの一部のみが必要です。テーブル間には多くの参照があります。
c# - 単体テストを満たすように適合されたメソッド。これは間違っているようです
私は単体テストに手を出し始め、私のプレゼンター メソッドの 1 つをテストするいくつかのテストを作成しました。このテストには、私のデータ アクセス クラスのモックと、特に 1 つのメソッドが必要です。これは、私のデータ アクセス クラスの元のメソッドです。
次のようなさまざまなシナリオでプレゼンター メソッドをテストしたいと思います。
- エリアの通常のリスト
- 領域の空のリスト
- 重複のある領域のリスト
- 空の文字列領域を 1 つ含むリストまたは領域
私が最初に考えたのは、これらのシナリオごとに個別のモック データ アクセス クラスを作成することでした。これは少し面倒だと思ったので、メソッドを少し変更して、現在のテストに固有のデータを含むさまざまな xml ファイルを読み取れるようにしました。私のモックメソッドの外観は次のとおりです。
このモック メソッドは、次のように PresenterTest クラスから呼び出されます。
さて、ここでの問題は、元のメソッドの署名を変更する必要があることです (dataSource パラメーターへの参照を追加することにより)。
このパラメーターは単体テストにのみ必要なため、実際のプレゼンター クラスから null の値がこのメソッドに渡され、使用されることはありません。
これが間違っていることはわかっていますが、これをどのように達成する必要がありますか? 各テスト データ シナリオを設定する個別のモック データ アクセス クラスを作成する必要がありますか?
grails - Geb grails で機能テスト データをセットアップおよび破棄する方法
機能テスト スイートの最初にすべて BootStrap.groovy から作成されたテスト データを使用して Web アプリケーションをテストしている、機能する / 合格する機能 geb/spock テスト (それぞれが GebReportingSpec を拡張する) が多数あります。
テスト データの作成を各 Spec 内の startup()/teardown() メソッドに移動したいのですが、実際には基本クラスから継承させたかったのですが、明らかに StepWise には継承の問題があります。
したがって、現在、各テスト スペック クラスは次のようになっています。
さて、私の問題は、テスト データを作成できる新しいテスト (最初のテストの上) を作成できないように見えることです。有効な given/when/then ステートメントがないと、テストが実行されていないように見え、既存のテスト内からメソッドを呼び出すことも機能していないように見えます。私は grails-remote-control プラグインを調べて、データを設定するためのクロージャーを正常に呼び出すことができると信じていますが、GebReportSpecs (またはいくつかの抽象的な親) 内からこれを呼び出すための最良のメカニズムについてはわかりません。 .
以下は、「setupData()」を最初のテストにするか、テスト内からそのメソッドを呼び出すことによって、私ができるようにしたいことの簡単な概要です...どちらも機能していないようです。
これらのメソッドを強制的に呼び出せる @before などの注釈はありますか?
任意の提案をいただければ幸いです。
解決策: 以下の dmahapatro の回答を正しい回答として受け入れましたが、役立つと思われる方のために、私の最終的な解決策の例を以下に示しました。
email - テスト用の大量の HTML メール返信はどこで入手できますか?
HTML メールの返信を解析するライブラリの開発を試みたいと思います。テストのために、さまざまな HTML メールの返信が必要です (さまざまなメール クライアントから、さまざまな言語で)。この種のテスト コンテンツを把握するには、どうすればよいでしょうか?
公開メーリング リストのアーカイブ (Google グループを含む) を見たことがありますが、これらのサービスの多くはテキスト ベースのメールしか許可していません。
何か案は?
csv - テストとトレーニング セットは互換性がありません
同じ問題に関するさまざまな記事を見てきました。多くの解決策を試しましたが、何も機能していません。親切にアドバイス。
WEKA でエラーが発生します。
「分類子の評価の問題: テストとトレーニング セットに互換性がありません」。
私は使っている
私のアルゴリズムとしてのJ48
これは私のテストセットです:
(コードが長くてコピペできない)
WEKA (Traningset 用) で「バッチ フィルタリング」を試しましたが、まだ機能しません。
編集:私も変換しました
.csv to .arff
が、それでも同じ問題です。EDIT2: 両方の CSV のヘッダーが一致することを確認しました。それでも同じ問題。助けてください!
ご意見をお聞かせください。