2016-07-25 80 views
0

此代码无法按预期方式工作。预计失败时我会通过;并期望通过assertRaises()时失败。assertRaises不捕捉异常/不抱怨没有异常

test_db.py:

import unittest 

class TestConnectDatabase(unittest.TestCase): 
    def test_close(self): 
     self.assertRaises(ReferenceError, self.close_database()) # <--- Problem #1 
     pass 

    # Just a stub for brevity... 
    def close_database(self): 
     #raise Exception(ReferenceError)       # <--- Problem #2 
     pass 

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

在该示例中代码传递即使没有引发异常的单元测试。如果#raise未被注释,则该异常仅传递给命令行,并且测试在应该通过时失败。

执行测试使用: python -m test_dbpython test_db.py

+0

@Mark,@DavidCullen:确保传入的内容是参考似乎解决了它不标记异常的问题。但是,如果我取消注释'#raise Exception(ReferenceError)'测试仍然失败!? '''Traceback(最近调用最后一个): 文件“C:\ ... \ test_db.py”,第5行,在test_close中 self.assertRaises(ReferenceError,self.close_database) 文件“C:\ Anaconda2 \文件“C:\ ... \ test_db.py”,第9行,在close_database中 raise Exception(ReferenceError) 例外:''' – kashiraja

+0

你试过了吗?引用ReferenceError(“这是一个错误。”)'而不是'raise Exception(ReferenceError)'? @kashiraja – Mark

+0

__这似乎工作...真棒!__我真的在这里的新领域.. Thx为您的帮助! – kashiraja

回答

1

你调用方法self.close_database,当你应该只传递一个参考吧。删除括号

def test_close(self): 
    self.assertRaises(ReferenceError, self.close_database) 

查看the docs了解更多详情。

1

self.close_database后删除括号:

class TestConnectDatabase(unittest.TestCase): 
    def test_close(self): 
     self.assertRaises(ReferenceError, self.close_database) 
     pass 

要调用self.close_database这意味着它的结果(None)获取传递给assertRaises。请参阅assertRaises的文档。