Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any way to create integration test for libGDX application?

I apologize if the question is duplicated, but I can't find any information about this.

I know that I can use JUnit to create simple unit tests, but I can't run it on android/iOS devices. If I understand correctly, I can use Instrumented Unit Tests, but they are for android platform only. In this case, I can't test functions from libGDX core (am I wrong?). So, I'm interested, how can I run my tests on devices?

like image 444
Tamplier Avatar asked Feb 15 '17 14:02

Tamplier


People also ask

Can JUnit do integration testing?

JUnit 5 defines an extension interface through which classes can integrate with the JUnit test. We can enable this extension by adding the @ExtendWith annotation to our test classes and specifying the extension class to load. To run the Spring test, we use SpringExtension.

Is jest an integration test?

Now once you run npm run test , or jest , in the command line, it will create the test_book_database database, seed it with any migrations you had (to set up the schema and any necessary data), and you can access the database in each integration test.

What are integration tests frontend?

Front-end testing: the integration tests. Integration tests ensure that various parts of the app work together. They're crucial from a business viewpoint. Remember that users don't care if a single function of your app works.

How do I get Started with libGDX?

A Simple Game Before you can get started with libGDX, you need to set up an IDE (Integrated Development Environment). It is basically an editor for your java files, which makes developing java applications considerably more convenient in various ways. If you already have an IDE installed, you can skip to the next step.

How do I run an integration test?

There are several ways to execute integration tests and review the results--from the command line or from the test console in the host application's UI. The command line approach as described here compiles the project, starts up the application and executes all the tests.

How do I set up integration testing in Docker?

This sets up our basic testing commands. Step-2: Create or edit docker-compose.yaml. This defines application dependencies (DB, cache, message broker, etc). You can edit your docker-compose.yaml if you have a new dependency. Step-3: Create an integration testing code in your favourite language. Step-4: Execute the test command.

What is the best integration testing tool?

Top 10 Integration Testing Tools to Write Integration Tests. 1 VectorCAST/C++. 2 VectorCAST/Ada. 3 Citrus Integration Testing. 4 LDRA. 5 SMART INTEGRATION TEST ACCELERATOR (SITA) 6 FitNesse. 7 Rational Integration Tester. 8 Protractor. 9 TESSY. 10 Validate MSG.


1 Answers

Testing libGDX applications is not an easy topic but with a good architecture it is possible. The crucial point is to separate the rendering part from the business logic you want to test. Rendering always requires an OpenGL context and will just break if you try to run it without that. You can actually write tests that require OpenGL if you don't plan to run them on a headless build server but just on your desktop.

That being said, testing of libGDX apps is mostly centered around the usage of HeadlessApplication that makes your libGDX-dependent code runnable in your test environment. If you want to start he whole game in a test, you need a headless version of it (here "MyGameHeadlessApplication"). Then you can initialize it like this:

    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);
    }

For testing smaller parts that depend on libGDX, there is a very conventient library available: The gdx-testing project contains a GdxTestRunner that wraps your tests in a HeadlessApplication and allows you something like this (from the gdx-testing example):

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

On top of that I had a little problem with my assets folder that couldn't be found in the tests in the first place. I fixed that by setting workingDir for tests in my build.gradle. And of cours make sure to have all the needed dependencies (also e.g. box2d if you need that in your tests). In my setup I have all tests in the "core" project:

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 ...

See also Unit-testing of libgdx-using classes

like image 107
Sebastian Avatar answered Oct 05 '22 06:10

Sebastian