在nbgrader中捕获后续自动评分器测试的自动评分答案的输出



我正在尝试用nbgrader自动化autograding。通常,学生在autograded answer单元格中编写一段代码(如variablefunction),教师使用(通过参考variablefunction)来编写autograder tests

但有时autograded answer单元格的输入代码可以只是一个print(...),它向屏幕输出一些东西(而不是variablefunction)。在这种情况下,怎么可能捕获打印的输出,以便我们可以在下一个单元格中使用它来在其上写入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')

最新更新