Python 如果存在打印语句,Pycharm将无限期地挂起unittests

Python 如果存在打印语句,Pycharm将无限期地挂起unittests,python,python-2.7,unit-testing,pycharm,python-unittest,Python,Python 2.7,Unit Testing,Pycharm,Python Unittest,我建立了一个全新的PyCharm项目来测试这一点。就在几个小时前,我可以把报表打印得到处都是,一点问题也没有。到目前为止,在任何项目中使用任何print语句都会导致整个过程永远旋转,最终由我的操作系统使用code 137 SIGKILL 9命令自动关闭 下面的代码是我能想到的最精简的演示: 导入单元测试 def hellothere(): 通过 类TestTest(unittest.TestCase): def设置(自): stuff=hellothere() 印刷品(材料) def测试(自我)

我建立了一个全新的PyCharm项目来测试这一点。就在几个小时前,我可以把报表打印得到处都是,一点问题也没有。到目前为止,在任何项目中使用任何print语句都会导致整个过程永远旋转,最终由我的操作系统使用code 137 SIGKILL 9命令自动关闭

下面的代码是我能想到的最精简的演示:

导入单元测试
def hellothere():
通过
类TestTest(unittest.TestCase):
def设置(自):
stuff=hellothere()
印刷品(材料)
def测试(自我):
通过
值得注意的是,将
stuff=hellother()
更改为
stuff=str(hellother())
并删除打印作品,然后返回而不是打印作品

我试着在终端中设置它,但当我在终端中运行它时,我得到
ValueError:runTest中没有这样的测试方法

dmesg报告了
低交换:使用pid 6093(python2.7)和大小1051 MB杀死最大的压缩进程,但我在其中找不到任何其他相关信息

我正在使用pycharm verion的以下信息:


和python 2.7。

奇怪的行为,也许您简化的示例没有您的原始代码所具有的东西

我尝试了以下代码:

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_abc
工作,结果如下:

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

OK                                                                      
必须有其他东西使测试进入无限循环。我会尝试在控制台中运行测试,而不使用pycharm进行进一步检查

更新:下面是问题的OP解决方案,它与虚拟环境有关。我们仍然不知道是什么阻碍了unittests中的
print()
,但我们学会了避免它

我的教训是,像PyCharm这样的重量级IDE试图复制命令行中的任何问题。此外,IntelliJ支持似乎反应相当迅速


我刚想出来。当我创建一个新项目时,我的项目解释器中使用的虚拟环境刚刚被复制过来,这就是为什么创建一个新项目没有修复它。我用一个新的虚拟环境创建了一个新的解释器,问题解决了


当我从保存单元测试的文件夹中尝试
python-m unittest\u abc
时,它告诉我
AttributeError:“module”对象没有属性“test\u abc”
,我还尝试了
python-m test\u main test\u smth
(test\u main是我文件的名称)我得到的
AttributeError:“module”对象没有属性“test\smth”
可能会从一个文件夹上尝试。如果您在测试文件夹中,python无法发现测试中的代码。您可能会遇到类似于python-m unittest test/test_abc.py的东西,我能告诉您的是,有了print语句,它就不起作用了,没有print语句,其他任何更改都不会起作用。打印什么也没关系,我甚至可以说print()然后挂起。我甚至一整天都没有更改任何设置。只有当它在测试本身中或者在测试调用的函数中时。如果它是全局打印或
语句的一部分,如果它是
语句的一部分。当我创建一个新项目时,我的项目解释器中使用的虚拟环境刚刚被复制过来,这就是为什么创建一个新项目没有修复它。我用一个新的虚拟环境创建了一个新的解释器,问题解决了!