Pycharm和unittest不起作用

时间:2013-11-27 19:28:23

标签: python pycharm python-unittest

我遇到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)

这是正常的我让测试失败了。对于发生的事情,我有点无能为力 更多信息: 设置 - > Python INtegrated Tools->包需求文件:/ 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()

7 个答案:

答案 0 :(得分:41)

虽然原始海报的情况并非如此,但我还是要注意,导致这种情况的另一个原因是测试功能不会以“测试”这个词开头。 。'

class TestSet(unittest.TestCase):

    def test_will_work(self):
        pass

    def will_not_work(self):
        pass

答案 1 :(得分:16)

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

enter image description here

答案 2 :(得分:4)

绝对是一个pycharm thingy,从上面重复,

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

答案 3 :(得分:1)

我有完全相同的问题。事实证明,识别单个测试的事实与文件名有关。在我的情况下,test_calculate_kpi.py,即PyCharm在重命名为test_calculate_kpis.py时未将其视为测试,立即得到认可。

答案 4 :(得分:0)

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

  1. 确保您为测试方法提供前缀'test'(如前所述),例如: 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和nose working)

  5. <强>输出

    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... 
    

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我有同样的问题。该文件名为test_exercise_detectors.py(请注意复数“检测器”),并且位于一个名为test_exercise_detectors的打包文件中。将文件名更改为test_exercise_detector.py(单个“检测器”)可以解决此问题。