データ ジェネレータ機能拡張の概要
Visual Studio Team System Database Edition を使用すると、テスト用に最適なデータを生成できます。 組み込みのデータ ジェネレータを使用すると、ランダムなデータを生成したり、既存のデータ ソースからデータを生成したりできます。また、データ生成のさまざまな側面を制御できます。 組み込みのジェネレータの機能が不足している場合、カスタム データ ジェネレータを作成できます。 カスタム データ ジェネレータを作成するには、Microsoft.VisualStudio.TeamSystem.Data.DataGenerator 名前空間のクラスを使用します。
データ ジェネレータの機能拡張 API
機能拡張 API は、開発者が継承できるクラスを提供します。 API には、クラス以外に、派生クラスに適用できる属性が含まれています。 これらの属性を適用することで、一般的にカスタム ジェネレータで必要とされるコードの量を減らすことができます。
カスタム データ ジェネレータを作成するには、次の 4 つの方法で機能拡張 API を使用します。
機能拡張 |
説明 |
難易度 |
例 |
---|---|---|---|
宣言機能拡張 |
|
初級 |
組み込みの整数データ ジェネレータ |
通常の機能拡張 |
|
標準 ほとんどの場合、この方法をお勧めします。 |
|
集約機能拡張 |
|
標準 |
なし |
基本機能拡張 |
|
上級 |
なし |
集約機能拡張
集約機能拡張では、通常は Generator クラスから継承します。 次に、標準データ ジェネレータ クラスの 1 つ以上のインスタンスを作成します。標準ジェネレータ クラスにアクセスするには、Microsoft.VisualStudio.TeamSystem.Data.Generators.dll への参照を追加する必要があります。このファイルは、...\Program Files\Microsoft Visual Studio 9.0\DBPro\Extensions にあります。
基本機能拡張
基本機能拡張 API は、データ生成エンジンおよびデータ生成計画のデザイナが対話に使用する機構です。 この API は、次の目標を達成できるように設計されました。
保全性 - デザイン時エンジンと実行時エンジンの両方で、一貫した堅牢な実装を促進します。
柔軟性 - データ バインド ジェネレータなど、複雑なジェネレータをサポートします。
基本機能拡張 API で暗黙的に行われるデザインのトレードオフは、上位レベルの宣言機能拡張 API よりも複雑であることを示します。
カスタム データ ジェネレータを登録する
カスタム ジェネレータを使用する前に、そのジェネレータをコンピュータに登録する必要があります。 他のユーザーもカスタム データ ジェネレータを使用できるようにするには、そのジェネレータを他のユーザーのコンピュータにも登録する必要があります。 カスタム データ ジェネレータを登録する方法は、次のとおりです。
メソッド |
必要なアクセス許可 |
例 |
---|---|---|
ジェネレータを Private Assemblies フォルダに登録します。 |
パワー ユーザー以上 |
|
ジェネレータをグローバル アセンブリ キャッシュに登録します。 |
管理者 |
なし |
ジェネレータを登録するための配置プロジェクトを作成します。 |
管理者 |
なし |
データ ジェネレータ、分布、およびデザイナ
カスタム データ ジェネレータや、それらのジェネレータに使用できるカスタム デザイナを作成できます。 数値用のデータ ジェネレータに使用できるカスタム分布や、それらの分布に使用できるカスタム デザイナを作成することもできます。
カスタム データ ジェネレータは、指定した規則のセットに基づいてランダムなテスト データを生成します。 このジェネレータと共に既定のデザイナを使用するか、DefaultGeneratorDesigner から継承することで、このジェネレータに使用するカスタム デザイナを作成できます。 たとえば、正規表現データ ジェネレータは、カスタム デザイナを使用する組み込みのジェネレータで、デザイン時にユーザー入力のカスタム検証を実行できます。
カスタム ジェネレータ デザイナでは、入力プロパティや出力プロパティをユーザーから取得したり、既定の設定や検証動作の指定を行ったりする方法をカスタマイズできます。
カスタム分布では、データ ジェネレータが生成する数値の配分を制御できます。
カスタム分布デザイナは、カスタム分布のデザイン時の動作を制御します。 これには、分布の入力プロパティ名の取得、入力プロパティの既定値の設定、分布の入力プロパティの値の検証などの動作が含まれます。
データ ジェネレータとローカリゼーション
Visual Studio には複数の言語バージョンが付属しているため、Team Edition for Database Professionals に付属するデータ ジェネレータはローカライズされます。 ほとんどの場合、カスタム データ ジェネレータをローカライズする必要はありません。 ローカライズされるデータ ジェネレータを作成する必要がある場合は、カスタム デザイナを作成する必要があります。 また、GetInputs メソッドをオーバーライドして、入力プロパティ名をローカライズすることもできます。
メモ : |
---|
可能な場合、IDesigner インターフェイスを実装するのではなく、DefaultGeneratorDesigner クラスから継承して、追加作業が発生しないようにします。 |
データ ジェネレータのインスタンス化
カスタム データ ジェネレータはデータを共有できます。 共有データのスコープは、ジェネレータの種類と SQL テーブルです。 すべてのジェネレータには、SQL テーブルごとに一意のインスタンス ディクショナリがあります。 たとえば、Customers という名前のテーブルのカスタム データ ジェネレータは、共有ディクショナリへのアクセス許可を持っています。 任意の情報をディクショナリに入力して、その情報を共有できます。 ディクショナリは、ジェネレータの種類およびテーブルごとに必ず同じインスタンスになります。 たとえば、カスタム データ ジェネレータを作成し、GeneratorInit からディクショナリを要求できます。 次に、ディクショナリに共有情報が含まれるかどうかを確認します。 共有情報が含まれる場合、その情報を使用してデータを生成できます。 ジェネレータの他のインスタンスが使用できる共有情報を作成することもできます。
メモ : |
---|
ジェネレータのインスタンス化は高度な技術です。 ジェネレータのインスタンス化を使用すると、列間の CHECK 制約を処理するカスタム データ ジェネレータを作成できます。 たとえば、ある列が別の列より大きい必要がある CHECK 制約などです。 |
データ生成プロセス
データ生成は、次のフェーズで行われます。
デザイナの型の確認 |
デザイン時 |
このフェーズでは、入力としてデータ ジェネレータの種類が必要です。 エンジンは GeneratorAttribute を問い合わせて、デザイナの型を取得します。 通常は、既定のデザイナを指定する基本クラスから GeneratorAttribute が継承されます。 |
デザイナのインスタンス化および初期化 |
デザイン時 |
デザイナがインスタンス化されます。 デザイナの初期化は、Initialize を呼び出し、引数としてジェネレータの型を渡すことで実行されます。 |
入力記述子の取得 |
デザイン時 |
デザイナから InputDescriptor が取得されます。 既定のデザイナは、InputAttribute でマークされているデータ ジェネレータのすべてのプロパティを取得することで、これを実行します。 |
既定値の設定 |
デザイン時 |
既定値が設定されます。 |
ジェネレータ出力の説明の取得 |
デザイン時 |
デザイナから OutputDescriptor が取得されます。 既定のデザイナは OutputAttribute が指定されたプロパティを使用して、[列の詳細] ウィンドウの [ジェネレータ出力] 列に表示される説明を作成します。 |
ジェネレータのインスタンス化 |
実行時 |
既定のコンストラクタを使用してデータ ジェネレータがインスタンス化されます。 |
ジェネレータ入力の設定 |
実行時 |
すべての入力値は、デザイナから取得される入力記述子からデータ ジェネレータで設定されます。 |
ジェネレータの検証 |
実行時 |
ValidateInputs メソッドが呼び出された場合。 検証に失敗した場合、ジェネレータは InputValidationException 例外をスローします。 データ検証の例外以外の例外は、回復不能なエラーとして扱われます。 |
ジェネレータの初期化 |
実行時 |
Initialize メソッドが呼び出された場合。 この手順により、データ ジェネレータはデータ生成の前に、ターゲット データベースの接続文字列の指定、または乱数ジェネレータのシードなど、必要な設定を実行できます。 このフェーズは、データ生成の前に 1 回発生します。 |
データ生成の実行 |
実行時 |
このフェーズでは、GenerateNextValues メソッドを呼び出すことで、新しい結果が生成されます。 結果は、GetOutputValue メソッドを使用して取得できます。 このメソッドは、ジェネレータに入力として渡される出力キーに対応するジェネレータから、スカラ値を取得します。 このフェーズは、必要な結果がすべて生成されるまで結果を反復処理します。 |
消去 |
実行時 |
すべてのデータ生成が完了した後、Dispose が呼び出され、ジェネレータがクリーンアップされます。 |
参照
処理手順
概念
カスタム データ ジェネレータで独自のテスト データを生成する