期望 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)