LoginSignup
13
13

More than 5 years have passed since last update.

MATLABでのヘルプや単体テストの書き方

Last updated at Posted at 2019-03-03

はじめに

C++でコードを書くとき、私はdoxygenを使うことを前提に常にヘッダーファイルにコメントを記入する習慣がついています。ところが、MATLABスクリプトを書くときは、ほとんど授業の宿題やプロットの作成が主の(ほぼ)使い捨てのスクリプトなので、コメントやテストを書く必要性が乏しく、MATLABのヘルプや単体テスト機能についてほとんど知りませんでした。

しかし、C++で書いていたライブラリの機能の一部をMATLABのパッケージとして移植する過程で、MATLABの`ヘルプや単体テスト機能を調べたので、備忘録として簡単にまとめておきます。

参考リンク

クラスや関数にヘルプ用コメントを加える

関数やクラスの宣言の直下にコメントを加えると、helpdocコマンドを使ったときにそのコメントが表示されます。
例えば次のような関数をrotateTensor.mファイルに作成し、

function B = rotateTensor(A,R)
% B = ROTATETENSOR(A,R) - Rotate tensor A using a given rotation matrix R
B = R*A*R';
end

この関数をhelpコマンドを通して呼び出すと、コメント部分が表示されます。

>> help rotateTensor
  B = rotateTensor(A,R) - Rotate tensor A using a given rotation matrix R

クラスの場合も同様に、クラス定義の直下に書かれているコメントがヘルプコマンドで表示されます。
クラスの各プロパティやメソッド直下に書かれたコメントは、各プロパティやメソッドを指定してhelpコマンドに渡すと表示されます。

>> help [ClassName].[PropertyName]
>> help [ClassName].[MethodName]

ヘルプ概要ファイルを作成する

ヘルプ概要ファイルとは、フォルダに置かれたContents.mという名前のファイルで、そのフォルダのプログラムの概要を提供します。ヘルプ概要ファイルが作成されていると、helpコマンドを使ってそのフォルダの概要を表示させることができます。

>> help [FolderName]

ヘルプ概要ファイルには、フォルダに含まれる関数・クラスの機能についてコメントを書いておきます。詳しくはMathWorksのドキュメンテーションを参考にしてください。

単体テストの作成

MATLABは単体テストのフレームワークを提供しています。

の3つの書き方がありますので、好きなものを選んで単体テストを書きましょう。
それぞれの書き方の詳細についてはMathWorksのドキュメンテーションを参照してください。
ここではスクリプトベースの書き方について簡単に解説します。

単体テストのスクリプトには

  • スクリプトファイル名の先頭または末尾はtestでなければならない(大文字小文字は区別されない)。
  • 各単体テストはスクリプトファイルの個別のセクション(%%で始まる行)に配置する。
  • テストスクリプトでは、最初のセクション (%%で始まる最初の行) の前に定義された変数が共有変数となる。共有変数は各テスト内で変更可能だが、テストごとに最初の値にリセットされる。

という決まりがあります。
スクリプトを作成したらruntestsコマンドを使ってテストを実行することができます。例えば次のようなmyUnitTest.mという単体テストスクリプトがあったとして

myUnitTest.m
% test vector operations
v1 = [1 2 3];
v2 = [3 4 5];

%% Test 1: sum of vectors
v = v1 + v2;
assert(all(v == [4 6 8]))

%% Test 2: dot product of vectors
v = dot(v1, v2);
assert(v == 26)

%% Test 3: cross product of vectors
v = cross(v1, v2);
assert(dot(v,v1) == 0 && dot(v,v2) == 0)

%% Test 4: outer product of vectors
v = kron(v1',v2);
assert(all(all(v == [3 4 5; 6 8 10; 9 12 15])))

このスクリプトを実行するには下記コマンドを入力します。

>> result = runtests('myUnitTest')
myUnitTest を実行しています
....
myUnitTest が完了しました
__________

result = 

  1×4 TestResult 配列のプロパティ:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

合計:
   4 Passed, 0 Failed, 0 Incomplete.
   0.018604 秒間のテスト時間。
13
13
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
13
13