【发布时间】:2011-05-18 05:11:55
【问题描述】:
我想编写一个测试来确定在给定情况下不会引发异常。
测试是否引发异常很简单...
sInvalidPath=AlwaysSuppliesAnInvalidPath()
self.assertRaises(PathIsNotAValidOne, MyObject, sInvalidPath)
...但是你怎么能做到相反的。
我追求的是这样的……
sValidPath=AlwaysSuppliesAValidPath()
self.assertNotRaises(PathIsNotAValidOne, MyObject, sValidPath)
【问题讨论】:
-
你总是可以简单地做任何应该在测试中起作用的事情。如果它引发错误,则会显示出来(算作错误,而不是失败)。当然,这假设它不会引发任何错误,而不仅仅是定义类型的错误。除此之外,我想你必须自己写。
-
事实证明,您实际上可以实现一个
assertNotRaises方法,该方法与assertRaises共享其90% 的代码/行为,大约需要大约30 行代码。详情请见my answer below。 -
我想要这个,所以我可以将两个函数与
hypothesis进行比较,以确保它们为各种输入产生相同的输出,同时忽略原始引发异常的情况。assume(func(a))不起作用,因为输出可能是一个真值不明确的数组。所以我只想调用一个函数并得到True,如果它没有失败。assume(func(a) is not None)我猜是有效的
标签: python unit-testing