代码之家  ›  专栏  ›  技术社区  ›  doobop

Python unittest-在运行单个测试或整个套件时检查stderr更改

  •  0
  • doobop  · 技术社区  · 6 年前

    我有一个Python单元测试,它将测试一个使用操作系统访问查看是否允许写访问。如果没有,则通过stderr返回一条消息,表示“不允许写访问”

    claas MyUnitTests(unittest.TestCase):
        @mock.patch('os.access')
        def test_save_test_data_no_write(self, os_access):
            os_access.return_value = False
            with captured_output() as (std_out, std_err):
                tcs.my_method_to_test(self.test_dir_name, "non exist dir", *file_params)
                msg = std_err.getvalue()
                self.assertIn("No write access", msg)
    
    
    @contextmanager
    def captured_output():
        map_out, map_err = StringIO(), StringIO()
        orig_out, orig_err = sys.stdout, sys.stderr
        try:
            sys.stdout, sys.stderr = map_out, map_err
            yield sys.stdout, sys.stderr
        finally:
            sys.stdout, sys.stderr = orig_out, orig_err
    

    如果我将此测试作为单个测试或单个模块(仅此类中的测试)运行,它就可以正常工作。

    python -m unittest my_unit_test.MyUnitTest.test_save_test_data_no_write
    

    python -m unittest discover -p *test.py
    

    我不太清楚是什么原因造成的。我的问题是

    • 为什么stderr会改变?其他测试是否在可能与stderr冲突的其他线程中运行?
    • 有没有一种不同的方法来编写测试,让它工作或围绕它工作?
    0 回复  |  直到 6 年前