我有以下非常简单的实用函数:
原来,尽管该函数非常简单,但它存在一个问题使我遇到了问题(
请注意,我不想测试
或者可能我走错了方向 - 也许我应该忘记测试所做的调用,而是直接测试
也许我想得太多了,但我想改进我的测试实践,所以会感激任何建议。谢谢!
function vfprintf(verbose, varargin)
% VFPRINTF Display output optionally depending on the level of verbosity.
%
% VFPRINTF(TF, ARGS) passes the arguments ARGS to the built-in MATLAB
% command |fprintf| if TF is logical true. If TF is logical false, VFPRINTF
% does nothing.
assert(islogical(verbose),...
'utils:InvalidVerbose',...
'VERBOSE must be logical true or false');
if verbose
fprintf(varargin{:});
end
原来,尽管该函数非常简单,但它存在一个问题使我遇到了问题(
assert
条件应为islogical(verbose) && isscalar(verbose)
而不仅仅是islogical(verbose)
),因此我想在其周围实施一些单元测试。请注意,我不想测试
fprintf
- 我假设它没问题。那么有没有办法测试这样的内容:
- “如果
verbose
是逻辑标量true,则调用fprintf
” - “如果
verbose
是逻辑标量false,则不会调用fprintf
” - “如果
verbose
是逻辑非标量,则不会调用fprintf
” - “如果
verbose
不是逻辑值,则不会调用fprintf
”
fprintf
,然后将其覆盖MATLAB路径上的真实函数,在某种程度上触发一个fprintfCalled
事件,由测试代码监听以确定何时被调用。这是唯一的方法吗?感觉有些过分了。或者可能我走错了方向 - 也许我应该忘记测试所做的调用,而是直接测试
vfprintf
的命令行和/或文件输出。但是这感觉就像我在测试fprintf
而不是vfprintf
。也许我想得太多了,但我想改进我的测试实践,所以会感激任何建议。谢谢!
vfprintf
,因此您需要知道是否在任何时候调用了fprintf
。是这样吗?难道您不能检查文件是否已更改大小/被修改吗? - Ander Bigurifprintf
而不是vfprintf
。理想情况下,我希望只依赖于fprintf
,并且只测试是否调用了它。(但也许你会建议这对单元测试来说是一个不好的实践,我不知道)。 - Sam Robertsvfprintf
,因为它并不总是会被打印出来,这取决于verbose
。因此,你并没有测试fprintf
能否正确地完成所有工作,而是测试了vfprintf
。对fprintf
的单元测试将会更加复杂。 - Ander Biguri