2017-09-01 14 views
1

Octaveの.mファイルにsubfunctionsを定義しており、%testthe built-in self-testを使用して、これらのサブ関数をユニットテストのようにテストしたいとします。Octaveのサブ関数をテストする

私の.mファイルは次のようになります。

function A = fn1() 
    A = 1 
end 

function B = fn2() 
    B = 2 
end 

%!test 
%!assert (fn2(), 2) 

しかし、私が言われた:

!!!!!テストは

「はFN2」未定義のニアラインに私はサブ関数を定義し、Octaveの組み込みのテスト機能でそれをテストすることが可能であるかどうかを知りたい2列9

に失敗しました。ありがとう。

UPDATE:

私は、Java/Pythonの世界から来て、オクターブに新しいです。私がOctaveを使っていくつかの問題の作業を始めるとき、私はOctaveで組み込みのテスト機能を探して、Octaveでいくつかの "private"関数をテストしようとします。私がOctaveで見つけた "private"関数は "subfunctions"と思われ、Octaveの組み込みテスト機能は%testセルフテストなので、サブ関数の自己テストを行う方法を探しています。オクターブ。

+0

@Andy私はOctaveを初めて使いました。この質問では問題ではないと思ったので、ファイル名は含めませんでした。この場合、ファイル名は重要ですか? – nybon

+0

基本ファイル名が関数(関数ファイルと呼ばれる)と同じかどうか(スクリプトファイルと呼ばれる)が異なる場合は違いがあります。通常、関数ファイルにテストを記述し、 "main"関数はテスト中にサブ関数を呼び出します – Andy

答えて

4

サブファンクションにテストを書き込むことはできません。テストは、テストブロック内のコードを で実行することで動作します。テストブロックにエラーがある場合は、エラーコード が失敗します。通常、テストユニットはコードテストのどこかでテストされる機能を と呼ぶでしょう。

ただし、サブ関数は、親の 関数のスコープ内にのみ存在します。他のスコープでは利用できないため、 を呼び出すことはできません。関数が ではないため、テストユニットは失敗します。

これは実際には非常によくある質問です。典型的な答えは、 subfunctionは親によってどこかに呼び出されるだけです。だから の代わりに、その サブ関数への呼び出しをカバーするテストユニットを作成する必要があります。それが難しくなる場合は、あなたの親関数 が多すぎるかもしれないし、複数の 関数を持つことを考慮する必要があります。

関連する問題