如果存在打印语句,Pycharm将无限期挂在单元测试上

时间:2019-07-02 20:59:47

标签: python python-2.7 unit-testing pycharm python-unittest

我建立了一个全新的PyCharm项目以对其进行测试。截至几个小时前,我到处都可以看到打印报表,没有任何问题。到目前为止,在任何项目中使用任何打印语句都会导致整个过程永远旋转,最终由我的操作系统使用代码137 SIGKILL 9命令自动关闭。

以下代码是我能想到的最简洁的示例:

import unittest

def hellothere():
    pass

class TestTest(unittest.TestCase):
    def setUp(self):
        stuff = hellothere()
        print(stuff)

    def test(self):
        pass

值得注意的是,将stuff = hellothere()更改为stuff = str(hellothere())并删除了打印作品,并且返回而不是打印作品也是如此。

我尝试在终端中进行设置,但是当我在终端中运行时,得到ValueError: no such test method in <class '__main__.TestTest'>: runTest

dmesg报告low swap: killing largest compressed process with pid 6093 (python2.7) and size 1051 MB,但我在那里找不到任何其他相关信息。

我在下面使用pycharm版本信息: enter image description here

和python 2.7。

1 个答案:

答案 0 :(得分:1)

奇怪的行为,也许您简化的示例没有原始代码所拥有的内容?

我尝试了以下代码:

import unittest

def hellothere():
    pass

class TestTest(unittest.TestCase):
    def setUp(self):
        self.stuff = hellothere()
        print("this is", self.stuff)

    # fixed: you need test_ for test discovery 
    def test_smth(self):
        pass
        assert self.stuff is None    

if __name__ == '__main__':
    unittest.main()   

它既可以用作python test_abc.py也可以用作python -m unittest test_abc,其结果如下:

this is None                                                            
.                                                                       
----------------------------------------------------------------------  
Ran 1 test in 0.001s                                                    

OK                                                                      

还必须有其他因素才能使测试进入无限循环。我会尝试在没有pycharm的控制台中运行测试以进行进一步检查。

更新:以下是该问题的OP解决方案,它与虚拟环境有关。我们仍然不知道什么使单元测试中的print()感到窒息,但学会了避免它。

我的课程是,使用PyCharm这样的重量级IDE尝试在命令行中复制任何问题。同样,似乎IntelliJ支持也很on similar issues

  

我只是想通了。当我创建一个新项目时,只是在我的项目解释器中使用的虚拟环境被复制了,这就是为什么创建一个新项目不能修复它的原因。我使用新的虚拟环境创建了新的解释器,问题已解决!