Autotest

Now that we can re-use our base items, let's add a simple autotest. We inherit the new item from the MyApplication item and add an "autotest" type:

// qbs/imports/MyAutoTest.qbs

MyApplication {
    type: base.concat(["autotest"])
}

This additional type is required for the helper AutotestRunner item. This item runs all products with the "autotest" type when it is being built. It also implicitly depends on all such products, so they will be built before running as well.

Let's add this item to our top-level Project item:

Project {
    name: "My Project"
    minimumQbsVersion: "2.0"
    // ...
    AutotestRunner {
        timeout: 60
    }
}

Here we set the timeout property to 60 seconds so that our runner kills tests that run way too long.

Now we need to add our first test. Let's create a new product with the following content:

// test/test.qbs

MyAutoTest {
    Depends { name: "mylib" }
    name: "mytest"
    files: "test.c"
}

Here we depend on our library (which we are going to test), set the product name, and specify the source file, which looks like this:

// test/test.c

#include "lib.h"

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    if (argc > 2) {
        printf("usage: test [value]\n");
        return 1;
    }
    const char *expected = argc == 2 ? argv[1] : "Hello from library";
    if (strcmp(get_string(), expected) != 0) {
        printf("text differs\n");
        return 1;
    }
    return 0;
}

The test compares the value from the library with the value from the command line.

Don't forget to add the new test product to the references property in the Project:

references: [
    "app/app.qbs",
    "lib/lib.qbs",
    "test/test.qbs",
]

Now we can build the autotest product - this will also launch our test:

$ qbs build -p "autotest-runner"
...
running test mytest [autotest-runner]
Build done for configuration default.

© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.