我正在尝试用nbgrader
自动化autograding
。通常,学生在autograded answer
单元格中编写一段代码(如variable
或function
),教师使用(通过参考variable
或function
)来编写autograder tests
。
但有时autograded answer
单元格的输入代码可以只是一个print(...)
,它向屏幕输出一些东西(而不是variable
或function
)。在这种情况下,怎么可能捕获打印的输出,以便我们可以在下一个单元格中使用它来在其上写入autograder tests
?
nbgrader文档包括一个示例,演示如何修补内置函数print
,以便您可以捕获和测试打印输出:
问题:验证函数调用导致打印某个结果
测试代码可以写成def foo() #... print('right result')
from unittest.mock import patch with patch('__main__.print') as mock_print: foo() mock_print.assert_called_once_with('right_result')
如果打印正确,则该测试静默通过,但如果打印错误:
def foo() #... print('wrong result')
引发断言错误,输出形式为
--------------------------------------------------------------------------- AssertionError Traceback (most recent call last) ... AssertionError: Expected call: print('right result') Actual call: print('wrong result')