Add Unit Tests
To avoid regression, we recommend adding unit tests for all your tasks.
There are two main ways to unit-test your tasks. Both will be regular Micronaut tests, and hence must be annotated with @MicronautTest
.
Unit test a RunnableTask
This is the most common way to test a RunnableTask. You create your RunnableTask, and test output or Exception. This will cover most of the cases.
This is same as any Java unit tests, feel free to use any dependencies, test methods, start docker containers, ...
Unit test with a full flow
In case you want to add some unit test with a full flow (In some rare case, it can be necessary; for example, for FlowableTask), here is how you can write the unit test with the full flow.
With this, you will:
- Inject all dependencies with
@Inject
. - On
init()
, load all the flow on thesrc/resources/flow
directory. - Run a full execution with
Execution execution = runnerUtils.runOne(null, "io.kestra.templates", "example");
. The first parameter is for thetenantId
which can be null on tests.
With this execution, you can look at all the properties you want to control (status, taskRunList number, outputs, ...)
To make it work, you need to have an application.yml
file with this minimum configuration:
kestra:
repository:
type: memory
queue:
type: memory
storage:
type: local
local:
basePath: /tmp/unittest
And these dependencies on your build.gradle
:
testImplementation group: "io.kestra", name: "core", version: kestraVersion
testImplementation group: "io.kestra", name: "repository-memory", version: kestraVersion
testImplementation group: "io.kestra", name: "runner-memory", version: kestraVersion
testImplementation group: "io.kestra", name: "storage-local", version: kestraVersion
This will enable the in memory runner and will run your flow without any other dependencies (kafka, ...).
Was this page helpful?