Python单元测试 - 在0.000秒内进行0测试

时间:2017-05-13 20:50:12

标签: python unit-testing python-unittest python-module

所以我想为练习做这个代码Kata。 我想在单独的文件中用tdd实现kata:

算法:

# stringcalculator.py  
def Add(string):
   return 1

和测试:

# stringcalculator.spec.py 
from stringcalculator import Add
import unittest

class TestStringCalculator(unittest.TestCase):
    def add_returns_zero_for_emptyString(self):
        self.assertEqual(Add(' '), 0)

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

运行测试文件时,我得到:

Ran 0 tests in 0.000s

OK

但它应该返回一个失败的测试。我在这里想念什么?

7 个答案:

答案 0 :(得分:24)

如python unittest doc中所述:

  

最简单的TestCase子类将简单地实现一个测试方法   (即名称以test开头的方法)

因此,您需要将方法名称更改为以下内容:

def test_add_returns_zero_for_emptyString(self):
    self.assertEqual(Add(' '), 0)

答案 1 :(得分:13)

旁注:此外,所有测试所在的文件名称应以'test _'开头

答案 2 :(得分:1)

症状相同,但问题不同。确保您没有混淆制表符和空格的缩进。当您从在线资源复制代码并将其更新为您的需要时,可能会出现此问题。由于制表符和空格在大多数编辑器中看起来非常相似,因此可能无法正确定义测试功能。

答案 3 :(得分:0)

我有类似的问题。我的根本原因是我已将unittest.main的执行块放在Test类中。这保持了消息传递RAN 0测试。将其移出课堂即可。

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

答案 4 :(得分:0)

class TestStringCalculator(unittest.TestCase):
    def add_returns_zero_for_emptyString(self):
        self.assertEqual(Add(' '), 0)

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

在考虑以上编写代码中的以上两点之后, 由于行(if __name__ == '__main__'

的前缀空间,导致出现以下错误
python3 test_flaskr.py 
  File "test_flaskr.py", line 66
    if __name__ == '__main__':
                             ^

确保没有前缀空间,您需要在第一列编写代码,如下所示:

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

答案 5 :(得分:0)

Do not define __init__;对于该链接,请改用def setUp(self),unittest会调用它。另外,请勿定义run;我将我的重命名为_run,问题终于消失了。

答案 6 :(得分:0)

就我而言,我在当前测试目录中添加了__init__.py,问题就消失了。