我有一个测试框架,其中每个测试都是一个 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