Python 如果存在打印语句,Pycharm将无限期地挂起unittests
我建立了一个全新的PyCharm项目来测试这一点。就在几个小时前,我可以把报表打印得到处都是,一点问题也没有。到目前为止,在任何项目中使用任何print语句都会导致整个过程永远旋转,最终由我的操作系统使用code 137 SIGKILL 9命令自动关闭 下面的代码是我能想到的最精简的演示: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测试(自我)
导入单元测试
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()然后挂起。我甚至一整天都没有更改任何设置。只有当它在测试本身中或者在测试调用的函数中时。如果它是全局打印或语句的一部分,如果它是
语句的一部分。当我创建一个新项目时,我的项目解释器中使用的虚拟环境刚刚被复制过来,这就是为什么创建一个新项目没有修复它。我用一个新的虚拟环境创建了一个新的解释器,问题解决了!