【发布时间】:2011-11-21 17:10:20
【问题描述】:
unittest 的 Python 文档暗示 assertRaises() 方法可以用作上下文管理器。下面显示的代码给出了 Python 文档中 unittest 的简单示例。 testsample() 方法中的 assertRaises() 调用工作正常。
现在我想在引发异常时访问它,但如果我将其注释掉,而是取消注释我尝试使用上下文管理器的下一个块,我会在尝试执行时得到一个 AttributeError: __exit__编码。 Python 2.7.2 和 3.2.2 都会发生这种情况。我可以在 try...except 块中捕获异常并以这种方式访问它,但 unittest 的文档似乎暗示上下文管理器也会这样做。
还有什么我做错了吗?
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.seq = [x for x in range(10)]
def testshuffle(self):
# make sure the shuffled sequence does not lose any elements
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq, [x for x in range(10)])
def testchoice(self):
element = random.choice(self.seq)
self.assert_(element in self.seq)
def testsample(self):
self.assertRaises(ValueError, random.sample, self.seq, 20)
# with self.assertRaises(ValueError, random.sample, self.seq, 20):
# print("Inside cm")
for element in random.sample(self.seq, 5):
self.assert_(element in self.seq)
if __name__ == '__main__':
unittest.main()
【问题讨论】:
标签: python unit-testing