シナリオ
シナリオの概念とその概要について説明しています。
概要
シナリオとは, プラグインのテスト方法を step-by-step で定義したものです。
プラグインの開発者は, テストを実行するための前提環境や, テスト対象機能の発火, およびそれらの検証方法を1つのファイル(シナリオファイルという)に記述します。
Scenamatica は, プラグインに同梱されているシナリオファイルを読み込み, その内容に沿ってプラグインの機能を発火させ, テストの結果を検証・報告します。
「テストを実行するための前提環境」とは, シナリオに登場するエンティティ や模擬的なプレイヤ(アクタ), そしてテストのためのワールド(ステージ)の3つを指します。 これらは, 同ファイルに定義されるコンテキストによって提供されます。
つまり, 発火条件となるアクションを実行し, それによってもたらされたプラグインの動作を検証し続けることで, シナリオテストが成立します。
Scenamatica はこのようなテストの需要に最適化されているのです。
参考:以下は, シナリオの概要を示す図です(エンティティは省略されています)。
例を用いた説明
例えば, とある小さなプラグインについて考えてみましょう。
このプラグインは, 「プレイヤが村人をキルしたときに」(発火条件という)
-> 「ダイアモンドがドロップする機能」(目標動作という)を実現しており, 今回はこの機能をテストしたいこと とします。
このテストは, Scenamatica の以下の機能を用いて達成できます。
- コンテキスト - エンティティ 機能
この機能は, テストに必要なエンティティ(e.g. 村人, ガーディアン, 牛 等)をテストの開始前に生成, および終了後に破棄します。
発火条件で指定される, シナリオの遂行に必要な村人をスポーンさせるために使います。以下はその例です。context:
entities:
- type: villager- コンテキスト - アクタ 機能
この機能は, テストに必要な専用のプレイヤ(アクタという)を生成します。
外部との通信を必要とせずに, サーバ内だけで完結する特別なプレイヤのモックです。
発火条件にある村人をキルさせるのに使います。以下はその例です。context:
actors:
- name: Actor001- アクションの実行 機能
この機能は, テストに必要な一般的な動作(e.g. プレイヤのキル, 食料の消費, プレイヤの退室)を実行します。
数あるアクションを組み合わせて利用し, プラグイン機能の発火・目標動作の検証を行います。
動作の検証には, アクションの実行期待 機能を使用します。以下はその例です。scenario:
- type: execute
action: player_death
with:
target: Actor001
- type: expect
action: entity_pickup_item
with:
target: Actor001
item: diamond
このドキュメント内で使用される「シナリオ」という語は, 以下の2つの意味を持ちます。
- コンテキスト や トリガー, アクションのフローとしてのシナリオ など, シナリオファイルの内容すべてを一般に指す語。
- プラグインの振る舞いを検証するためのアクションとその振る舞いの組。
# このファイル自体をシナリオファイルで記述された「シナリオ」と呼ぶ。
#...
scenario:
# ↓の一つ一つもまた「シナリオ」と呼ぶ。
- type: execute
action: player_death
with:
target: Actor001
- type: expect
action: player_death
with:
target: Actor001
シナリオの構成要素
シナリオテストを作成するためには, シナリオがどのような要素で構成されているかを知る必要があります。
シナリオを構成する要素については, 次のページで説明されています: