self.assertTrue 在 Python 3.x 单元测试中抛出回溯错误

self.assertTrue throwing traceback error in Python 3.x unittesting

我正在 运行 进行一个小的单元测试来检查罗马数字转换器。这是我的代码:-

class RomConverter(object):
    def __init__(self):
        self.digital_mapping = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I":1}  
    def convert(self, rom_num):
        value = 0    
        for char in rom_num:
            val += self.digital_mapping[char]
            return value

import unittest 
class RomConverterTest(unittest.TestCase):
    def settingUp(self):
        print ("Creating a new RomConverter...")
        self.cvt = RomConverter()
    def tearDown(self):
        print ("Destroying the RomConverter...")
        self.cvt = None
    def test_empty_num(self):
        self.assertTrue(self.cvt.convert("") == 0)
        self.assertFalse(self.cvt.convert("") > 0)
    def test_no_rom_num(self):
        self.assertRaises(TypeError,self.cvt.convert, None) 
if __name__ == "__main__":
    unittest.main() 

但是当我 运行 代码时我收到了这条消息 :-

Traceback (most recent call last):
  File "receipe2 - Copy.py", line 31, in test_empty_roman_numeral
    self.assertTrue(self.cvt.convert_to_decimal("") == 0)
AssertionError: False is not true

我发现你的代码有两个问题。

第一个def settingUp(self):应该是def setUp(self):

并且 def convert(self, rom_num): 的 return 缩进了很多。结果该方法不会 return 0 incase of an empty string。 这是一个工作版本:

class RomConverter(object):
    def __init__(self):
        self.digital_mapping = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I":1}
    def convert(self, rom_num):
        value = 0
        for char in rom_num:
            value += self.digital_mapping[char]
        return value

import unittest
class RomConverterTest(unittest.TestCase):
    def setUp(self):
        print ("Creating a new RomConverter...")
        self.cvt = RomConverter()
    def tearDown(self):
        print ("Destroying the RomConverter...")
        self.cvt = None
    def test_empty_num(self):
        self.assertTrue(self.cvt.convert("") == 0)
        self.assertFalse(self.cvt.convert("") > 0)
    def test_no_rom_num(self):
        self.assertRaises(TypeError,self.cvt.convert, None)

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