在没有显示的情况下测试 wxPython 小部件

Testing wxPython widget without a display

我有这个测试用例:

class MyNiftyPanelTest(unittest.TestCase):
    def setUp(self):
        self.app = wx.App()
        self.frame = wx.Frame(None)
        self.sut = SUT(self.frame, -1)

    […]

    def tearDown(self):
        wx.CallAfter(self.frame.Close)
        self.app.MainLoop()

其中 SUT 是一个 class 继承自 wx.Panel 的东西。当我 运行 在我的 X11 显示器上的控制台上进行测试时,这工作得很好。没有显示 windows,但很明显事情发生了。

然而,当我通过 tox 运行 它时(无论是 tox -r 还是使用 xvfb-run tox -v -r),我得到以下错误:

SystemExit: Unable to access the X Display, is $DISPLAY set properly

调用时 self.app = wx.App().

使用

@pytest.mark.skipif(os.getenv('DISPLAY', False) == False,
                    reason="does not run without a DISPLAY")

当 运行ning tox 没有 DISPLAY 时,我可以跳过这些测试,但这意味着我的 CI 工具 (Jenkins) 将始终报告错误的测试覆盖率。

如何让这个测试在无头显示器上运行?

我认为你需要将 tox.ini 中的 $DISPLAY env var 传递给 pytest:

[testenv]
passenv = DISPLAY

如果您已有一个,也可以添加到列表中。