2017-09-01 105 views
1

我在我的Octave的.m文件中定義了一些subfunctions,並且希望在Octave %test中使用the built-in self-test來測試這些子函數,如單元測試。Octave中的測試子函數

我.m文件看起來是這樣的:

function A = fn1() 
    A = 1 
end 

function B = fn2() 
    B = 2 
end 

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

但有人告訴我:

!!!!!測試失敗

「FN2」未定義接近行2列9

我想知道是否有可能定義子功能,並與倍頻的內置測試功能進行測試。謝謝。

UPDATE:

我從Java/Python的世界來了,是新來的八度。當我開始使用Octave處理某個問題時,我嘗試在Octave中尋找一些內置的測試功能來測試Octave中的一些「專用」功能。我在Octave中找到的「私有」功能似乎是「子功能」,而Octave中的內置測試功能是%test自檢,這就是爲什麼我正在尋找一種方法來對子功能進行自檢八度。

+0

@Andy我是Octave的新手,我認爲這個問題並不重要,所以我沒有包含文件名。這種情況下文件名稱是否重要? – nybon

+0

如果基本文件名與函數(然後稱爲函數文件)相同或不相同(然後稱爲腳本文件),則存在差異。通常你在測試中寫入測試,而「main」函數在測試過程中調用子功能 – Andy

回答

4

您不能將測試寫入子功能。測試通過在測試塊中運行代碼 來工作。如果 測試塊中的代碼錯誤,則測試失敗。通常,測試單元會在代碼測試的某處調用正在測試的 函數。

但子功能只存在於其父代 功能的範圍內。他們將不能在任何其他範圍內使用,因此無法調用 。測試單元將失敗,因爲該功能不是定義的 。

這實際上是一個很常見的問題。典型的答案是 子功能只存在於父母的某處。相反,您應該編寫一個測試單元來覆蓋對該子函數的調用。如果它變得太困難,那麼你的父母功能 可能會做太多的事情,你應該考慮有多個 功能。