【问题标题】: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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多