测试异常错误

2024-09-30 22:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我要测试的虚拟类:

class Meter:

    def __init__(self, meterInfo):
        self.b1pos = meterInfo['b1pos']


    def setMeter(self):
        print 'Initializing'
        try:
             print 'Connecting'
        except IOError as message:
            print message

    def readSignal(self, ele_name):
        try:
            if ele_name in ("b1", "b2"):
                readValue = 0.0
                readValue1 = 0.0
                return readValue, readValue1
            else:
                readValue = 0.0
                readValue1 = 0.0
                return readValue, readValue1
        except IOError as message:
            print message

这是我的单元测试:

class TestMeter(unittest.TestCase):

    def testSetMeter(self):
        m = meter.Meter({'b1pos': 'b1pos'})
        self.assertRaises(IOError, m.setMeter())

    def testReadSignal(self):
        m = meter.Meter({'b1pos': 'b1pos'})
        a, b = m.readSignal('b1')
        self.assertTrue(isinstance(a, numbers.Number))
        self.assertTrue(isinstance(b, numbers.Number))
        self.assertRaises(IOError, m.readSignal('b1'))

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

对于testSetMeter(),我没有任何问题,但是对于testReadSignal(),它会告诉我:“TypeError:'tuple'object is not callable” 我知道这个错误与雷达信号的返回有关,但是我怎么能修复它呢? 我试过:

 def testReadSignal(self):
    m = meter.Meter({'b1pos': 'b1pos'})
    a, b = m.readSignal('b1')
    self.assertTrue(isinstance(a, numbers.Number))
    self.assertTrue(isinstance(b, numbers.Number))
    with self.assertRaises(IOError):
         m.readSignal('b1')

但这就是结果:

AssertionError: IOError not raised

Tags: selfnumbermessagedefb1isinstancemeterprint
2条回答

必须使用pytest.raises公司相反。参见docs。你知道吗

with self.raises(IOError):
    m.readSignal('b1')

测试似乎也会失败,因为这些方法是捕获异常,而不是引发异常。你知道吗

 self.assertRaises(Exception, m.readSignal('b1'))

我解决了这个问题

相关问题 更多 >