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

Mat*_*Som 22 python unit-testing python-module python-unittest

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

算法:

# stringcalculator.py  
def Add(string):
   return 1
Run Code Online (Sandbox Code Playgroud)

和测试:

# 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()
Run Code Online (Sandbox Code Playgroud)

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

Ran 0 tests in 0.000s

OK
Run Code Online (Sandbox Code Playgroud)

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

abc*_*ccd 30

正如python unittest doc中所述:

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

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

def test_add_returns_zero_for_emptyString(self):
    self.assertEqual(Add(' '), 0)
Run Code Online (Sandbox Code Playgroud)

  • 我很挣扎,没有 **test** 作为我的方法名称的前缀。 (2认同)

Sha*_*ank 15

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

  • 你的意思是约定俗成? (2认同)
  • 出于惯例目的,是的,如果您使用** nose **之类的工具来运行单元测试,也可以。如果文件名以'test_'开头,则只有鼻子可以发现其中的测试并运行它们。 (2认同)

小智 5

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

if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)


Zub*_*san 5

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