期望 Python assertRaises() 失败,但测试总是通过
Expecting Python assertRaises() to fail, but test always passes
我正在尝试进入 TDD 实践,所以我一直在尝试从 Python 的单元测试模块开始。我已经编写了一个我完全希望失败的测试,但它总是通过!下面是测试代码:
def test_file_not_found_exception(self):
invalid_config = "Testing/invalidExperiment.xml"
experiment_with_invalid_config = MyClass(invalid_config)
self.assertRaises(OSError, experiment_with_invalid_config.run_experiment())
和我的class定义如下:
class MyClass:
def __init__(self, experiments, output_directory = ".")
self._experiments = experiments
self._output_directory = output_directory
def run_experiment(self):
try:
x = 2 # dummy statement
except OSError:
print "Experiment file not found"
except:
print "Unexpected Error"
我认为 try 块应该始终正确执行,所以我不知道为什么我的单元测试一直通过。我对 Python 中的 OOP 很陌生,所以我可能犯了一个非常明显的错误......此外,如果我在 run_experiment() 方法的 try-except 块中捕获异常,是否应该assertRaises() 调用是否有效?
您正在调用函数 MyClass.run_experiment
并将它的输出传递给 self.assertRaises,因此它在引发失败时没有正确注册错误。
不正确的示例:
import unittest
class MyClass(object):
def __init__(self, config):
pass
def run_experiment(self): pass
class MainTest(unittest.TestCase):
def test_file_not_found_exception(self):
invalid_config = "Testing/invalidExperiment.xml"
experiment_with_invalid_config = MyClass(invalid_config)
self.assertRaises(OSError, experiment_with_invalid_config.run_experiment())
if __name__ == "__main__":
unittest.main()
正确:
with self.assertRaises(OSError):
experiment_with_invalid_config.run_experiment()
或
self.assertRaises(OSError, experiment_with_invalid_config.run_experiment)
我正在尝试进入 TDD 实践,所以我一直在尝试从 Python 的单元测试模块开始。我已经编写了一个我完全希望失败的测试,但它总是通过!下面是测试代码:
def test_file_not_found_exception(self):
invalid_config = "Testing/invalidExperiment.xml"
experiment_with_invalid_config = MyClass(invalid_config)
self.assertRaises(OSError, experiment_with_invalid_config.run_experiment())
和我的class定义如下:
class MyClass:
def __init__(self, experiments, output_directory = ".")
self._experiments = experiments
self._output_directory = output_directory
def run_experiment(self):
try:
x = 2 # dummy statement
except OSError:
print "Experiment file not found"
except:
print "Unexpected Error"
我认为 try 块应该始终正确执行,所以我不知道为什么我的单元测试一直通过。我对 Python 中的 OOP 很陌生,所以我可能犯了一个非常明显的错误......此外,如果我在 run_experiment() 方法的 try-except 块中捕获异常,是否应该assertRaises() 调用是否有效?
您正在调用函数 MyClass.run_experiment
并将它的输出传递给 self.assertRaises,因此它在引发失败时没有正确注册错误。
不正确的示例:
import unittest
class MyClass(object):
def __init__(self, config):
pass
def run_experiment(self): pass
class MainTest(unittest.TestCase):
def test_file_not_found_exception(self):
invalid_config = "Testing/invalidExperiment.xml"
experiment_with_invalid_config = MyClass(invalid_config)
self.assertRaises(OSError, experiment_with_invalid_config.run_experiment())
if __name__ == "__main__":
unittest.main()
正确:
with self.assertRaises(OSError):
experiment_with_invalid_config.run_experiment()
或
self.assertRaises(OSError, experiment_with_invalid_config.run_experiment)