表驱动测试中如何正确使用assertRaises并避免重复调用被测函数
表驱动测试优化:避免重复调用被测函数
在编写表驱动测试时,存在部分测试用例会抛出异常、部分不会的场景,开发者希望避免在两处重复调用被测函数my_code。直接向assertRaises传入None的方式会导致测试失败,当前采用的分支判断方案存在重复调用my_code的问题,最终通过在基础测试用例中添加辅助函数assertRaisesUnlessNone实现了目标。
初始尝试代码
尝试直接给assertRaises传None,但测试失败:
tests = [ (0, None), (1, None), (-1, TooFewException), (99, None), (100, TooManyException), ] for n, exc in tests: with self.assertRaises(exc): results = my_code(n) assert len(results) == n
现有分支方案代码
通过分支判断区分异常和正常场景,但存在my_code重复调用的问题:
tests = [ (0, None), (1, None), (-1, TooFewException), (99, None), (100, TooManyException), ] for n, exc in tests: if exc is not None: with self.assertRaises(exc): my_code(n) else: results = my_code(n) assert len(results) == n
优化后代码
在基础测试用例中实现assertRaisesUnlessNone辅助函数,统一逻辑,避免重复调用:
tests = [ (0, None), (1, None), (-1, TooFewException), (99, None), (100, TooManyException), ] for n, exc in tests: with self.assertRaisesUnlessNone(exc): results = my_code(n) assert len(results) == n
内容的提问来源于stack exchange,提问作者Thomas David Baker
相关产品推荐
相关产品推荐

