gpt4 book ai didi

unit-testing - 为单元测试公开 M 文件子函数的最简单方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:53 24 4
gpt4 key购买 nike

我最近一直在尝试将连续测试完全集成到我的 Matlab 开发周期中,但遇到了一个我不知道如何解决的问题。几乎所有用户都知道,Matlab 善意地隐藏了 M 文件中的子函数,使该 M 文件之外的任何函数都看不到。下面是一个玩具示例:

function [things] = myfunc(data)
[stuff] = mysubfunc(data)
things = mean(stuff);
end

我想对 subfunc 本身执行单元测试。据我所知,这是不可能的,因为我无法从任何外部函数调用它。

我目前正在使用 Steve Eddins 的 Matlab xUnit,无法解决这个问题。简单的解决方案——将 subfunc 拆分到它自己的 M 文件——在实践中是 Not Acceptable ,因为我将有许多我想要测试的小函数,并且不想为每个单独的 M 文件污染我的文件系统.在不为我要测试的每个函数创建新文件的情况下,我该怎么做才能编写和执行简单的单元测试?

最佳答案

您通常需要做的是获取 function handles从主函数内部传递给子函数,并将它们传递到可以对它们进行单元测试的函数外部。一种方法是修改您的主要函数,以便在给定一组特定的输入参数(即没有输入、参数的一些标志值等)的情况下,它将返回您需要的函数句柄。

例如,您可以在函数的开头添加几行代码,以便在未指定输入时返回所有子函数句柄:

function things = myfunc(data)

if nargin == 0 % If data is not specified...
things = {@mysubfunc @myothersubfunc}; % Return a cell array of
% function handles
return % Return from the function
end

% The normal processing for myfunc...
stuff = mysubfunc(data);
things = mean(stuff);

end

function mysubfunc
% One subfunction
end

function myothersubfunc
% Another subfunction
end

或者,如果您更喜欢指定一个输入标志(以避免与意外调用没有输入的函数相关的任何混淆,正如 Jonas 在他的评论中提到的那样),您可以在输入时返回子函数句柄argument data 是一个特定的字符串。例如,您可以将上述代码中的输入检查逻辑更改为:

if ischar(data) && strcmp(data, '-getSubHandles')

关于unit-testing - 为单元测试公开 M 文件子函数的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com