在 Octave 中测试子功能

nyb*_*bon 3 unit-testing octave

我在 Octave 的 .m 文件中定义了一些子函数,并希望使用Octave 中内置的自测试%test来测试这些子函数,例如单元测试。

我的 .m 文件如下所示:

function A = fn1()
   A = 1
end

function B = fn2()
   B = 2
end

%!test
%!assert (fn2(), 2)
Run Code Online (Sandbox Code Playgroud)

但有人告诉我:

!!!!! 测试失败

'fn2' 在第 2 行第 9 列附近未定义

我想知道是否可以定义子函数并使用 Octave 的内置测试功能对其进行测试。谢谢。

更新:

我来自 Java/Python 世界,是 Octave 的新手。当我开始使用 Octave 解决一些问题时,我尝试在 Octave 中寻找一些内置的测试功能来测试 Octave 中的一些“私有”函数。我在Octave中找到的“私有”函数等效项似乎是“子函数”,而Octave中的内置测试功能是自测试%test,这就是为什么我正在寻找一种对Octave中的子函数进行自测试的方法。

car*_*aug 5

您无法为子函数编写测试。测试通过运行测试块中的代码来进行。如果测试块中的代码错误,则测试失败。通常,测试单元会在代码测试中的某个位置调用正在测试的函数。

但是,子函数仅存在于其父函数的范围内。它们在任何其他范围内不可用,因此无法被调用。由于函数未定义,测试单元将失败。

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