【问题标题】:Python unittest - Ran 0 tests in 0.000sPython unittest - 在 0.000 秒内运行 0 次测试
【发布时间】:2017-10-12 23:04:54
【问题描述】:

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

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

【问题讨论】:

  • 很确定您需要在方法名称中的某处使用test
  • 要运行的TestCase方法必须以'test'开头!
  • 是的!奇怪,不知道这个限制。谢谢好心的先生们。
  • 你是怎么调用测试文件的?

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


【解决方案1】:

如python unittest doc中所述:

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

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

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

【讨论】:

  • 我很挣扎,没有 test 作为我的方法名称的前缀。
  • 谢谢,没想到我犯了这个愚蠢的错误。
【解决方案2】:

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

【讨论】:

  • 你的意思是为了约定?
  • 为了约定目的是的,如果你使用像 nose 这样的工具来运行单元测试。如果文件名以 'test_' 开头,nose 才能发现其中的测试并运行它们。
【解决方案3】:

我遇到了类似的问题。我的根本原因是我将 unittest.main 的执行块放在了 Test 类中。这保持了消息传递 RAN 0 测试。把它移到课堂之外。

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:
      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()
      

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2020-06-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-12
            相关资源
            最近更新 更多