有没有一种方法可以为libGDX应用程序创建集成测试?

7

非常抱歉,如果我有所重复,但我找不到任何关于这个问题的信息。

我知道我可以使用JUnit来创建简单的单元测试,但我无法在android / iOS设备上运行它。如果我理解正确,我可以使用仪器化单元测试,但它们仅适用于android平台。在这种情况下,我无法测试来自libGDX核心的函数(我错了吗?)。那么,我想知道如何在设备上运行我的测试?


你有没有在这方面取得任何进展? - Russ Wheeler
我觉得这应该是可以实现的,通过在集成测试的设置和拆卸部分使用HeadlessApplicationConfiguration开始一个HeadlessApplication,但我还没有在足够复杂的项目中进行足够深入的研究。 - Ross Taylor-Turner
1个回答

1
测试libGDX应用程序并不是一个简单的话题,但是通过良好的架构是可能的。关键点是将渲染部分与您想要测试的业务逻辑分离开来。渲染始终需要OpenGL上下文,并且如果您尝试在没有上下文的情况下运行它,它将会崩溃。您实际上可以编写需要OpenGL的测试,如果您不打算在无头构建服务器上运行它们,而只是在桌面上运行它们。
话虽如此,libGDX应用程序的测试大多集中在使用HeadlessApplication上,这使得您的依赖于libGDX的代码可以在测试环境中运行。如果您想在测试中启动整个游戏,则需要其无头版本(这里是"MyGameHeadlessApplication")。然后,您可以像这样初始化它:
    private MyGameHeadlessApplication application;

    @Before
    public void setUp() throws Exception {
        HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration();
        config.renderInterval = 1F / 30F;
        application = new MyGameHeadlessApplication();
        new HeadlessApplication(this.application , config);
    }

为了测试依赖于libGDX的小部件,有一个非常方便的库可用:gdx-testing项目包含一个GdxTestRunner,它将您的测试封装在HeadlessApplication中,并允许您像这样做(来自gdx-testing示例):

@RunWith(GdxTestRunner.class)
public class MySuperTestClass {
    @Test
    public void bestTestInHistory() {
        // libgdx dependent code runs here
    }
}

此外,我在测试中遇到了一个小问题,我的资产文件夹一开始无法找到。我通过在build.gradle中为测试设置workingDir来解决这个问题。当然,还要确保具有所有必需的依赖项(例如,如果您需要在测试中使用box2d,则需要安装)。在我的设置中,我将所有测试都放在“core”项目中:
project(":core") {
    apply plugin: "java"

    test {
        project.ext.assetsDir = new File("./assets")
        workingDir = project.ext.assetsDir
    }

    dependencies {
        testCompile "com.badlogicgames.gdx:gdx-backend-headless:$gdxVersion"
        testCompile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
        testCompile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop"
        // ... more dependencies here ...

另请参阅 使用libgdx的单元测试类


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接