在特定字符串开头的RuntimeErrors上使assertEqual不失败

时间:2013-04-04 16:00:50

标签: python unit-testing

我正在使用assertEqual

在Python中编写单元测试
def test_SetOwner(self, owner):
   self.objectid.SetOwner(owner)
   self.assertEqual(self.objectid.GetOwner(), owner)

这适用于大多数情况,但在某些特定情况下,RuntimeErrorCould not execute...开头会失败。但是,这是预期的,不应该在unittest套件中触发错误。

是否有一种方法以某种方式使assertEqual在运行时错误上失败,从此特定字符串开始,同时仍然捕获所有其他RuntimeErrors?或者有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您可以使用try/except块执行此操作,并分别检查这两种情况。

def test_SetOwner(self, owner):
    self.objectid.SetOwner(owner)
    try:
        owner_prime = self.objectid.GetOwner()
    except RuntimeError as e:
        self.assertTrue(e.args[0].startswith("Could not execute"))
    else:
        self.assertEqual(owner, owner_prime)

但正如我在上面的评论中提到的,这看起来不是一个非常好的单元测试。例如,如果某个bug在某个时刻被引入GetOwner(),那么它总会引发"无法执行" RuntimeError?这几乎肯定不是理想的行为,但你的测试将继续通过。