【问题标题】:Pycharm unit test interactive debug command line doesn't workPycharm单元测试交互式调试命令行不起作用
【发布时间】:2013-07-22 06:45:13
【问题描述】:

在调试单元测试时(通过 pycharm 测试运行器),可以打开交互式命令行,但是(与调试常规脚本时不同)输入的命令不会产生任何输出。事实上,似乎 stdout 正在某处被捕获,因为 stderr 按预期工作:

>>> print "a"
>>> import sys
>>> sys.stderr.write("moof")
moof
>>> sys.stdout.write("moof")
>>> sys.stderr.write("test")
test

这是预期的行为吗?我真的很喜欢交互式调试控制台,如果它在调试单元测试时也表现得很好,那就太棒了。

【问题讨论】:

    标签: unit-testing debugging pycharm


    【解决方案1】:

    这可能是因为您的测试运行程序正在捕获标准输出,而不是标准错误。

    我使用py.test 哪个captures both stdout and stderr 所以我看不到任何输出。如果我想查看输出,我必须将 -s 标志传递给我的 py.test 运行器,这可以通过修改运行/调试配置并将此标志添加到选项字段来完成。 (运行 > 编辑配置 > 默认值 > Python 测试 > py.test > 将 -s 添加到“附加参数”字段。)

    >>> print 'a'
    a
    >>> import sys
    >>> sys.stderr.write('moof')
    moof
    >>> sys.stdout.write('moof')
    moof
    >>> sys.stderr.write('test')
    test
    

    注意:-s 标志同样可以与 nose tests 一起使用

    【讨论】:

    • (运行 > 编辑配置 > 默认值 > Python 测试 > py.test > 将 -s 添加到选项字段。)
    • (运行 > 编辑配置 > 默认值 > Python 测试 > py.test > 将 -s 添加到选项字段------>(附加参数)。)通过 pytest 设置默认运行测试: (首选项 > 工具 > Python 集成工具 > 默认测试运行器)
    • 除了修改默认值外,还需要修改现有的运行配置。 Run > Edit Configurations > Python tests > "py.test in my_test_case.py" 在“附加参数”字段中添加 -s。
    • 在 PyCharm 2019.1 中,这变为 Run > Edit Configurations > Templates > Python tests > pytest 以进入相应的默认对话框。
    【解决方案2】:

    如果您不想在每次运行测试时更改运行/调试配置,可以将 JB_DISABLE_BUFFERING 环境变量设置为“-s”。 如果您使用 ^+SHIFT+D 快捷方式在编辑器中调试当前文件的测试,这很有用。

    【讨论】:

      【解决方案3】:

      对于单元测试,您可以将“--capture=no”添加到 Pycharm 运行/调试配置 - 这将实时显示所有输出

      【讨论】:

        【解决方案4】:

        单元测试通常不能与调试器结合使用,除非你明确地声明它们要被调试。为此,请使用装饰器“@unittest.debug”。

        s。也可以https://docs.python.org/3/library/unittest.html#organizing-tests 了解有关此主题的更多信息。

        【讨论】:

          猜你喜欢
          • 2013-10-20
          • 1970-01-01
          • 2019-08-08
          • 2019-03-22
          • 1970-01-01
          • 2023-03-22
          • 2016-10-09
          • 2018-07-03
          • 1970-01-01
          相关资源
          最近更新 更多