我有一个Java应用程序,使用JOGL提供了大部分的GUI。
您知道是否有任何工具可以自动化测试OpenGL应用程序(或更具体地说,使用JOGL的应用程序)?
更新一下:该工具可以在Linux或Windows上运行。
我有一个Java应用程序,使用JOGL提供了大部分的GUI。
您知道是否有任何工具可以自动化测试OpenGL应用程序(或更具体地说,使用JOGL的应用程序)?
更新一下:该工具可以在Linux或Windows上运行。
我之前已经为 C++(在 Linux 上使用 Qt 和 OpenGL)编写了单元测试,我不知道为什么不能为 Java 编写单元测试。
以下是对我有用的内容:
将你的 OpenGL 上下文提供程序抽象出来,以便你的其余代码独立于它。在我的情况下,主应用程序使用 Qt 的 QGLWidget,但单元测试使用基于 pbuffer 的 QGLWidget,我可以在没有任何窗口基础结构的情况下创建它(除了指定的 X11 DISPLAY)。后来,我添加了一个“离屏 Mesa”(纯软件 OpenGL 实现),所以它们甚至可以在没有 GPU 的无头构建机上工作。
保持你的 OpenGL 代码独立于你的 GUI 代码。在我的情况下,OpenGL“渲染引擎”不知道任何关于 Qt 类(例如鼠标事件)的信息。定义自己可测试的 API,它不与任何特定的 GUI 概念相关,并为其编写测试。
在单元测试中,使用 glReadPixels 从帧缓冲区中读取内容,并使用一些关于哪些像素应该是特定值的断言,或者走回归测试的路线并将帧缓冲捕获与您知道良好的存储图像进行比较(要么是手动验证,要么是因为它由某个其他参考模型生成)。
在任何图像回归测试中允许一些模糊度;大多数 OpenGL 实现产生略有不同的输出。
(我没有这样做,但是)理想情况下,您希望通过断言 GUI 层以响应 GUI 活动会使预期的渲染引擎调用序列。如果它这样做,并且你对你的渲染层有信心,因为上述测试......那么实际上不需要进行渲染。因此,为 GUI 测试创建适当的渲染层模拟对象(我想象这样的测试是“从这里拖动鼠标到那里导致调用渲染层来设置特定的变换矩阵”之类的东西)。