1

我有一个测试框架,其中每个测试都是一个 M 文件(例如 test_featureX.m),它对特殊(自定义)AssertionCollection 类的实例进行断言。用户在开发他们的功能时将单独运行测试,并且可能希望在测试期间将有用的信息打印到控制台,以帮助他们调试问题。我还有一个例程 testAll,它运行整个存储库的所有测试并以标准化的方式打印结果。在后一种用法中,我不希望将任何无关信息打印到控制台,因此测试执行包含在 evalc (evalc('test_featureX(ac);')) 中,它隐藏了 test_featureX 所做的任何控制台写入。

现在,我希望 testAll 在每次做出断言时实时打印到屏幕上。我想通过在将 AssertionClass 实例 (ac) 传递给 test_featureX 之前向它添加一个回调函数来做到这一点,并让该回调函数在每个通过的断言上打印一个更新。问题是回调函数是从源自 evalc 命令的调用堆栈中执行的,因此它的输出被路由到 evalc 字符串而不是控制台。

有没有办法强制输出到控制台,即使是在 evalc 评估期间,以便我的回调可以将状态打印到控制台,而 testAll 拒绝大多数标准写入控制台?

我希望结果可能如下所示:

s = evalc('testFunction();')
function testFunction()
    disp('line 1');
    fprintf('line 2\n');
    fprintf(TO_THE_CONSOLE, 'line 3\n');
end

...结果输出将是

line 3
  s =
    line 1
    line 2
4

1 回答 1

0

我不认为这是可能的。evalc 捕获除错误之外的所有内容。您最好的选择是向 testFunction 添加一个返回参数并在需要时显示它。

于 2013-01-29T03:36:49.353 回答