我在libgdx上写游戏;我使用junit框架来简化单元测试我的代码。 现在有代码的一部分(一个地图生成器,一个将我自己的地图格式转换成TiledMap的类......)我需要彻底测试,但它使用libgdx代码:从文件处理到资产加载。 我不打算以这种方式测试实际的图形输出或游戏本身:但我想测试单个组件(计算,资产访问......)以避免明显的错误。
我已尝试在" setUpBeforeClass"中尝试做类似的事情。方法:
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.useGL20 = true;
cfg.width = 480;
cfg.height = 320;
cfg.resizable = true;
LwjglApplication app = new LwjglApplication( new TestApplicationListener(), cfg);
在tearDownAfterClass()中调用:
Gfx.app.exit()
但是它确实创建了一个我不需要的窗口,而且当我需要的是初始化的文件处理时,它似乎有些过分。有没有更好的方法来初始化libGDX组件而不创建整个应用程序对象? 感谢。
回过头来看(感谢评论中的Sam),我意识到需要GL访问(加载资产需要它),但这种方法似乎不起作用:图形库似乎没有被初始化。 GDX文档没有帮助。任何线索?
答案 0 :(得分:11)
这个问题没有得到解答,我很惊讶没有人指出headless backend,这对于这种情况是理想的。将此与您最喜爱的模拟库相结合,你应该很高兴。
public class HeadlessLauncher {
public static void main(final String[] args) {
final HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration();
config.renderInterval = Globals.TICK_RATE; // Likely want 1f/60 for 60 fps
new HeadlessApplication(new MyApplication(), config);
}
}
答案 1 :(得分:2)
如前所示,有一个HeadlessApplication后端,它为您提供初始化的libGDX,但没有OpenGL上下文。对于使用OpenGL,您确实需要LwjglApplication后端来创建一个OpenGL窗口。
如果您在编写依赖OpenGL上下文的测试时遇到问题,请记住OpenGL is only attached to the thread of your LwjglApplication which is not the tread of your tests。您的测试必须调用Gdx.app.postRunnable(Runnable r)
来访问具有OpenGl上下文的线程。
在等待应用程序执行命令时,您可能希望使用synchronized
和CountDownLatch
暂停测试。