2017-07-17 94 views
0

这是我的伪类,我想测试:错误测试异常

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:'元组'对象不可调用” 我明白这个错误与radSignal的返回有关,但我该如何解决它? 我试着用:

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 
+0

你能告诉我们班万用表? –

+0

对不起,我在复印时输入错字,我改正了文字 – Joe

+0

真正的问题是什么?该函数捕捉异常,所以测试无法接收它。 – Efren

回答

0

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

我解决了这个问题

+0

这是测试其他东西,如果你是在IOError异常之后,那么它意味着它正在测试其他东西。也许澄清问题中的问题。 – Efren

+1

你是对的,我今天一直在审查代码。有两个错误:我不应该打印类Meter中的消息,而是提高它。和 self.assertRaises(Exception,m.readSignal('b1'))应该是: self.assertRaises(IOError,m.readSignal,'b1') – Joe

0

不得不使用pytest.raises代替。请参阅docs

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

它似乎也测试会失败,因为方法捕捉异常,而不是提高它们。

+0

谢谢你的回答。我使用它,但它给出了同样的问题 – Joe

+1

如果输出是:'AssertionError:IOError not raised',它只意味着该函数没有引发异常,这确实没问题,因为发布在代码中的代码没有提升那些,它实际上捕捉它们,所以它不会被扔到测试中。 – Efren

+0

如果它解决了问题,请标记为有效:) – Efren