【问题标题】:Capture output of autograded answer for subsequent autograder tests in nbgrader为 nbgrader 中的后续自动评分器测试捕获自动评分答案的输出
【发布时间】:2022-07-08 17:04:26
【问题描述】:
我正在尝试使用 nbgrader 自动化 autograding。通常,学生在教师使用的autograded answer 单元格中编写一段代码(如variable 或function)(通过引用variable 或function)来编写autograder tests。
但有时来自autograded answer 单元格的输入代码可能只是一个print(...),它在屏幕上输出一些东西(而不是variable 或function)。在这种情况下,如何捕获打印输出,以便我们可以在下一个单元格中使用它来写autograder tests?
【问题讨论】:
标签:
jupyter-notebook
jupyter
jupyterhub
nbgrader
【解决方案1】:
nbgrader 文档 include an example 演示了如何修补内置函数 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')