テスト データ メソッド

エンティティ ナビゲーション オブジェクトとヘルパー ナビゲーション オブジェクトは、テスト データの設定に使用できるテスト メソッドを公開します。 この記事では、最も一般的な種類のテスト データ メソッドに関する情報を提供します。

ファクトリ メソッド

ファクトリ メソッドはデータベースにまだ存在しないデータの作成に重点を置きます。 エンティティ ファクトリ メソッドには、 init メソッドと create メソッドの 2 種類があります。 init メソッドはエンティティを初期化しますがデータベースに保存しません。 create メソッドはエンティティを初期化して、そしてデータベースに保存します。

名前付け規則

init<EntitySpecification>

create<EntitySpecification>

この名前付け規則では、 <EntitySpecification> は、作成する必要があるオブジェクトの主要な特性の説明です。

salesOrder = data.sales().salesOrders().initDefault();

purchaseOrder = data.purch().purchaseOrders().createDefault();

ベスト プラクティス

create メソッドは、同じエンティティ仕様を持つ init メソッドを常に呼び出す必要があります。

Example

public AtlEntitySalesOrder createDefault()
{
    AtlEntitySalesOrder salesOrder = this.initDefault();
    salesOrder.save();
    return salesOrder;
}

前提条件データ

initメソッドは、前提条件データを設定します。

一部のエンティティを作成する前に、特定の前提条件を設定する必要があります。 このような場合は、エンティティを初期化する前に、 ensure メソッドを呼び出します。 また、前提条件の自動セットアップを必要とするすべてのエンティティ イベントをサブスクライブします。

Example

public AtlEntitySalesOrder initDefault()
{
    AtlEntitySalesOrder salesOrder;

    this.ensureCanCreate();

    salesOrder = new AtlEntitySalesOrder();
    salesOrder.parmCustomer(data.cust().customers().default());

    _salesOrder.postingInvoice += eventhandler(this.ensureCanPostInvoice);
    _salesOrder.postingPackingSlip += eventhandler(this.ensureCanPostPackingSlip);
    _salesOrder.releasingToWarehouse += eventhandler(this.ensureCanReleaseToWarehouse);
}

ビルダー メソッド

Builder メソッドは、データベースにまだ存在しないデータを作成するために使用する作成者オブジェクトを初期化します。

名前付け規則

<EntitySpecification>Builder

この名前付け規則では、 <EntitySpecification> は、作成する必要があるオブジェクトの主要な特性の説明です。

Example

catchWeightItem = data.invent().items().cwBuilder();

一般的なデータ メソッド

よく使われるデータ メソッドは、特定の方法で設定されたエンティティを参照する方法を提供します。 エンティティがデータベースに存在しない場合、メソッドによって作成されます。

名前付け規則

<EntitySpecification>

この名前付け規則では、 <EntitySpecification> は取得する必要があるオブジェクトの主要な特性の説明です。

Example

fifo = data.invent().modelGroup().fifo();

この例でメソッドの契約は、在庫モデルとしてモデル グループが先入れ先出し (FIFO) を使用するよう指定します。 その他の設定は既定値のままにできます。

場合によっては、実際の名前が契約をより理解しやすくします。

pieces = data.common().units().pieces();

この例では、 ピース が "quantity" クラスの測定単位であり、0 (ゼロ) の 10 進精度を持っているのは明らかです。

一般的なデータ メソッドの契約

一般的なデータ メソッドの共通契約について、いくつか覚える必要があります。

  • 同じ一般的なデータ メソッドを 2 回呼び出すと、同じエンティティへの参照を呼び出し元に提供する必要があります。

    fifo1 = data.invent().modelGroups().fifo();
    fifo2 = data.invent().modelGroups().fifo();
    fifo1.InventModelGroupId == fifo2.InventModelGroupId;
    
  • テスト エンティティを作成する価値は必ずしもありません。 テスト エンティティを作成しない場合は、既知のデータ メソッドから対応するレコード バッファーを返します。 たとえば、Site エンティティの作成に時間と労力を費やさない場合、 site の既知のデータ メソッドは InventSite レコードを返します。

    InventSite site = data.invent().sites().default();
    
  • このアプローチが理にかなっている場合、一般的なデータ メソッドは ID をオプション パラメータとして取ることができます。

    item1 = data.products().items().default('Item1');
    item2 = data.products().items().default('item2');
    

Implementation

<EntitySpecification>という名前のビルダーまたはファクトリ メソッドが既にある場合は、内部実装として使用して既知のエンティティを作成します。

Example

public InventTable whsBatchAbove(ItemId _itemId = this.whsBatchAboveItemId())
{
    InventTable whsItem = InventTable::find(_itemId, true);
    if (!whsItem)
    {
        whsItem = this.whsBatchAboveBuilder().setItemId(_itemId).create();
    }
    return whsItem;
}

確認メソッド

エンティティの作成またはビジネス操作の実行に必要な前提条件がメソッドによって設定されていることを確認します。

名前付け規則

ensureCan<ExecuteBusinessOperation>

この命名規則で <ExecuteBusinessOperation> は事業運営を表す動詞です。

data.sales().salesOrders().ensureCanCreate();

data.purch().purchaseOrders().ensureCanPostProductReceipt();

Implementation

請求書の転記など、複雑な事業運営のための前提条件の把握は複雑になる可能性があり、機能分野に関する多くの知識が必要です。

Example

public void ensureCanCreate()
{
    data.helpers().setNumberSequenceReference(extendedTypeNum(InventDimId));
}

自動前提条件設定

前提条件の自動セットアップを有効にするには、適切なensure メソッドでinitメソッドを呼び出します。 詳細については、この記事で前述したファクトリ メソッド セクションを参照してください。

クエリ メソッド

クエリ メソッドは、定義するナビゲーション ノードのエンティティ型に対して新しいクエリを初期化します。

名前付け規則

query

loadLinesQuery = data.whs().loadLines().query();

purchaseLinesQuery = data.invent().transferOrderLines().query();

詳細メソッド

仕様メソッドは、定義するナビゲーション ノードのエンティティ型の新しい仕様オブジェクトを初期化します。

名前付け規則

spec

Example

loadLinesSpec = data.whs().loadLines().spec();

検索メソッド

検索メソッドによって主キーに基づくエンティティを検索できます。

名前付け規則

find

Example

salesOrder = data.sales().salesOrders().find(salesOrderId);

自動前提条件設定

エンティティがクエリをサポートしている場合は、前提条件のサポートを既に設定しているクエリを使用します。 それ以外の場合は、レコード バッファーを見つけてエンティティの新しいインスタンスを初期化した後、エンティティのビジネス操作イベントに ensure メソッドをサブスクライブします。