2017-09-01 104 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

您不能将测试写入子功能。测试通过在测试块中运行代码 来工作。如果 测试块中的代码错误,则测试失败。通常,测试单元会在代码测试的某处调用正在测试的 函数。

但子功能只存在于其父代 功能的范围内。他们将不能在任何其他范围内使用,因此无法调用 。测试单元将失败,因为该功能不是定义的 。

这实际上是一个很常见的问题。典型的答案是 子功能只存在于父母的某处。相反,您应该编写一个测试单元来覆盖对该子函数的调用。如果它变得太困难,那么你的父母功能 可能会做太多的事情,你应该考虑有多个 功能。