【问题标题】:PyCharm and unittest won't runPyCharm 和 unittest 不会运行
【发布时间】:2013-12-13 14:54:36
【问题描述】:

我遇到了 PyCharm 3.0.1 的问题,我无法运行基本的单元测试。

这是我的代码:

import unittest from MysqlServer import MysqlServer


class MysqlServerTest(unittest.TestCase):


    def setUp(self):
        self.mysqlServer = MysqlServer("ip", "username", "password", "db", port)


    def test_canConnect(self):
        self.mysqlServer.connect()
        self.fail()


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

这是 PyCharm 给我的所有东西

无法将测试报告器附加到测试框架或测试框架意外退出

它也说

AttributeError: class TestLoader has no attribute '__init__'

还有事件日志:

2:14:28 PM Empty test suite

问题是当我手动运行 Python 文件时(使用 PyCharm,作为脚本)

Ran 1 tests in 0.019s

FAILED (failures=1)

这很正常,我故意让测试失败。我对发生的事情有点不知所措。 这里有更多信息:

  • Setting->Python Integrated Tools->Package requirements file: <PROJECT_HOME>/src/test
  • 默认测试运行器:单元测试
  • pyunit 1.4.1 已安装

编辑:unitests.py 的基本用法也会发生同样的事情

import unittest


class IntegerArithmenticTestCase(unittest.TestCase):
def testAdd(self):  ## test method names begin 'test*'
    self.assertEquals((1 + 2), 3)
    self.assertEquals(0 + 1, 1)

def testMultiply(self):
    self.assertEquals((0 * 10), 0)
    self.assertEquals((5 * 8), 40)


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

【问题讨论】:

  • 当我的setUpClass 抛出异常时,我在 Pycharm 中遇到了这个问题。
  • 下面添加的新答案可能对您的情况有所帮助。你能验证一下吗?

标签: python pycharm python-unittest


【解决方案1】:

添加

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

为我解决了这个问题。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。该文件名为test_exercise_detectors.py(注意复数“检测器”),它位于名为test_exercise_detectors 的打包文件中。将文件名更改为test_exercise_detector.py(单数“检测器”)解决了这个问题。

    【讨论】:

      【解决方案3】:

      即使我遇到了同样的问题,我也觉得工作区没有正确刷新。甚至我也做了 File->Synchronize(Ctrl+Aly+y)。但这不是解决方案。我刚刚重命名了我的测试 python 文件名,然后我再次尝试执行代码,它开始运行良好。

      【讨论】:

        【解决方案4】:

        我也有同样的问题。事实证明,识别单个测试的事实与文件名有关。在我的例子中,test_calculate_kpi.py 被重命名为 test_calculate_kpis.py 时 PyCharm 无法识别为测试,它立即被识别。

        【讨论】:

        • 重命名也对我有用。在我的情况下,项目中有多个文件具有相同的名称并将其重命名为唯一修复它。
        • 是的,包含测试的文件应该以“test_”开头
        【解决方案5】:

        使用 PyCharm 和大多数默认测试运行程序(py.test、nosetest、unittest 等)生成 html 报告的 4 个步骤:

        1. 确保为您的测试方法添加一个前缀“测试”(如其他人之前所述),例如def test_run1()
        2. 测试报告包文档中广泛使用的示例代码是

          import unittest
          import HtmlTestRunner
          
          class TestGoodnessOfFitTests(unittest.TestCase):
          
           def test_run1(self):
            ...
          
          if __name__ == '__main__':
           unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='t.html'))
          

          此代码通常位于包含所有单元测试和“main”-catcher 代码的测试类文件中。这段代码不断为我产生警告Empty test suite。因此,删除所有 if __name__ ... 代码。该文件现在只包含TestGoodnessOfFitTests 类。现在,另外

        3. 在测试类文件同目录下新建main.py,使用如下代码:

           import unittest
           import HtmlTestRunner
           test_class = TestGoodnessOfFitTests()
           unittest.main(module=test_class, 
           testRunner=HtmlTestRunner.HTMLTestRunner(output='t.html'))
          
        4. 删除旧的运行配置,右键单击 main.py 并按 Run 'main'。验证Preferences -> Python Integrated Tools -> Default test runner 下的正确设置(在我的情况下 py.test 和鼻子工作)

        输出

        Running tests... 
        ----------------------------------------------------------------------
         test_gaussian_dummy_kolmogorov_cdf_1 (tests.evaluation_tests.TestGoodnessOfFitTests) ... OK (1.033877)s
        
        ----------------------------------------------------------------------
        Ran 1 test in 0:00:01
        
        OK
        
        
        
        Generating HTML reports... 
        

        【讨论】:

        • 成功了,谢谢
        【解决方案6】:

        绝对是一个pycharm的东西,从上面重复,

        • 运行 --> 编辑配置。
        • 选择测试实例,然后按红色减号按钮。

        【讨论】:

        • 截图会有所帮助
        【解决方案7】:

        虽然原始海报不是这种情况,但我想指出导致这种情况的另一件事是不以单词“test”开头的测试函数。

        class TestSet(unittest.TestCase):
        
            def test_will_work(self):
                pass
        
            def will_not_work(self):
                pass
        

        【讨论】:

        • 这正是我的问题,当我意识到这一点时,我放声大笑。
        【解决方案8】:

        这可能是因为您没有在设置对话框中正确设置测试框架。

        【讨论】:

        • 在 JVM 更改后,(对 Sun 开放)几次重新启动,并使用 py.test 而不是 unittests(仍然无法正常工作)。我可以使用 py.test 框架在 pycharm 中运行我的测试。看起来我有一些不推荐使用的包,我必须通过 setuptools 更新。
        • 我看到我认为在 pycharm 3.x 上存在相同的基本问题。在 pycharm 的早期版本中,我的 if __name__ == '__main__' 块已被执行。现在不是。在调试器下运行时,这会弄乱一些测试。
        猜你喜欢
        • 2017-12-05
        • 2014-01-17
        • 2017-09-19
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多