Python unittest - 运行 0.000 秒内进行 0 次测试

Python unittest - Ran 0 tests in 0.000s

所以我想做这个代码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

它应该 return 然而,一个失败的测试。我在这里想念什么?

如 python 单元测试中所述 doc:

The simplest TestCase subclass will simply implement a test method (i.e. a method whose name starts with test)

因此您需要将方法名称更改为如下所示:

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

旁注:此外,所有测试所在的文件的名称应以 'test_'

开头

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

我遇到了类似的问题。我的根本原因是我将 unittest.main 的执行块放在测试 class 中。这使消息传递 运行 0 测试。将其移出 class 工作。

if __name__ == '__main__':
    unittest.main()
class TestStringCalculator(unittest.TestCase):
    def add_returns_zero_for_emptyString(self):
        self.assertEqual(Add(' '), 0)

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

考虑到上面写的代码中的以上两点, 由于行 ( if __name__ == '__main__')

的前缀 space,我遇到了以下错误
python3 test_flaskr.py 
  File "test_flaskr.py", line 66
    if __name__ == '__main__':
                             ^

确保没有前缀space,您需要在第1列编写代码如下:

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

Do not define __init__;根据 link,改用 def setUp(self),unittest 将调用它。另外,不要定义 run;我将我的重命名为 _run,问题终于消失了。

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