jupyter-notebook - 为 nbgrader 中的后续自动评分器测试捕获自动评分答案的输出

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

但有时,来自 autograded answer 单元格的输入代码可能只是一个 print(...),它将某些内容输出到屏幕(而不是 variablefunction)。在这种情况下,如何捕获打印输出,以便我们可以在下一个单元格中使用它来写入 autograder tests

回答1

nbgrader 文档 https://nbgrader.readthedocs.io/en/stable/user_guide/autograding_resources.html?highlight=print#id3 演示了如何修补内置函数 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')

相似文章

algorithm - Algorithm 按评级对数据进行排序

我有用户可以从1到5评分的地方的数据。评分最高的将首先出现。但是,如果一个地方有5星评级而只有one评级,它将出现在有4.5星评级的地方之前1k评级,我认为这是不公平的。我搜索了加权平均值,但没有找到...

最新文章