Help us understand the problem. What is going on with this article?

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

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に差し込み実行します.
テストケースを上から順に実行していきます.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした