libgdx使用类的单元测试

时间:2014-04-10 09:33:58

标签: java unit-testing junit libgdx

我在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文档没有帮助。任何线索?

2 个答案:

答案 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上下文的线程。

在等待应用程序执行命令时,您可能希望使用synchronizedCountDownLatch暂停测试。