LoginSignup
2
0

More than 3 years have passed since last update.

TECS単体テストフレームワーク TECSUnit の使い方

Last updated at Posted at 2020-02-21

TECSのTECSUnitの使い方です.

対象

TECSコンポーネント提供者

TECSUnitとは

TECSUnitはTECS単体テストフレームワークです.
各セルについて以下をテスト出来ます

  • セル変数
  • 受け口関数

テスト項目は一度に複数指定でき、簡易データ記述言語「JSON」で記載.

例えば、ETロボコン用フレームワークmruby on ev3rt+TECSで新たにTECSコンポーネント(セル)を実装した、もしくは既存のセルに新たな機能を追加したとします.
その際、コンポーネント提供者は各機能を詳細にテストする必要があります.
しかし、従来では対象一つ一つを手作業で接続しテストしなければならず、これは大きな負担となっていました.
TECSUnitを使うことで効率的なテストを実現します.

TECSUnitのコンポーネント図は以下の通りです.
TECSUnit_Diagram.png

次にTECSUnitの利点を挙げます.

  • JSONコードを用いた効率的なテスト
  • テストケースが最小限の構成
  • 再ビルド不要の動的テスト
  • コンポーネント実装であること

それぞれについて詳しく見ていきます.

JSONコードを用いた効率的なテスト

JSONは、軽量のデータ交換フォーマットです.
人間にとって読み書きが容易で、マシンにとっても簡単にパースや生成を行なえる形式です.

以下、JSONコードの一例です

target.json
{
  "target1":{
    "region":"リージョン名",
    "cell":"セル名",
    "entry":"受け口名",
    "function":"受け口関数名",
    "pre_cond":{セル変数名:値, ... },
    "post_cond":{セル変数名:値, ... },
    "argument":[受け口関数の引数値, ... ],
    "exp_val":受け口関数の返り値
  },
  "target2":{
    /* 省略 */
  },
}

このように各テスト項目を記載できます.
regionからfunctionまででテストターゲットの指定をします.
次に、pre_condでセル変数の事前条件、post_condでセル変数の事後条件を指定します.
そして、argumentで受け口関数の引数の指定を行い、exp_valで返り値の期待値を設定しています.

テストケースが最小限の構成

先のJSONコードはTECSInfoを用いたことによってテストターゲットの指定が最小限の記載で行えています(本来であればセルタイプ、呼び口なども必要).
また事前条件のセル変数の書き換えもTECSInfoにより行えています.

再ビルド不要の動的テスト

  • TECSプラグインによりテストコードが自動生成
  • ターゲットに動的結合で実効時に接続

これらによりテストケースが変更されたとしてもビルドし直す必要がありません.

コンポーネント実装であること

TECSUnitはコンポーネントベースで実装されているので、テストケースの入力や結果の出力をターゲットに対して容易に変更できます.

実例

実際にTECSUnitを使ってみます.
EV3RT+TECS用に実装したgithub:TECSUnitからダウンロードしてください.

% git clone https://github.com/seito-zoso/TECSUnit.git
% cd ev3rt+tecs/hr-tecs/workspace/TECSunit

TECSUnit.cdl にテスト対象となるセルを含んだCDLコードをインポートしてください.今回は"target.cdl"です.

TECSUnit.cdl
/* ターゲットのインクルード */
import( "target.cdl" );

インクルードしたらジェネレータに通します.
% make tecs

これによりtecsgenディレクトリにプラグインによりテストコードが自動作成されます.
次にJSONコードを作成します

target.json
{
  "target1":{
    "region":"rDomainEV3",
    "cell":"Target",
    "entry":"eTarget",
    "function":"function",
    "pre_cond":{data1:1,data2:1},
    "post_cond":{data1:2,data2:2},
    "argument":[1,1],
    "exp_val":0
  },
  "target2":{
    "region":"rDomainEV3",
    "cell":"Target",
    "entry":"eTarget",
    "function":"function",
    "pre_cond":{data1:2,data2:2},
    "post_cond":{data1:4,data2:4},
    "argument":[2,2],
    "exp_val":0
  }
}

作成できたら

% make

で、TECSUnitアプリケーションが作成されSDカードにuImage(バイトコード)とtarget.jsonがコピーされます.

後はSDカードをEV3に差し込み実行します.
テストケースを上から順に実行していきます.

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0