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

问题描述 投票:0回答:7

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

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

python unit-testing python-unittest python-module
7个回答
79
投票

如Python单元测试doc中所述:

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

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

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

20
投票

所有测试所在的文件名应以“test_”开头


6
投票

我也有类似的问题。我的根本原因是我将 unittest.main 的执行块放置在 Test 类中。这使得 RAN 0 测试保持消息传递。将其移至课堂作业之外。

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

5
投票

就我而言,我将

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


1
投票

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


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()

0
投票

不要定义

__init__
;根据该链接,使用
def setUp(self)
代替,unittest 将调用它。 另外,不要定义
run
;我将我的重命名为
_run
,问题终于消失了。

© www.soinside.com 2019 - 2024. All rights reserved.