Testing
Quarkus GitHub Actions are regular Quarkus command mode applications and can be tested with @QuarkusMainTest
.
A simple test would look like:
@QuarkusMainTest
public class SimpleActionTest {
@Test
@Launch(value = {})
public void testLaunchCommand(LaunchResult result) {
assertThat(result.getOutput()).contains(SimpleAction.TEST_OUTPUT);
}
}
While a more involved test pushing inputs and a suitable environment for output command execution would look like:
@QuarkusMainTest
@TestProfile(CommandsActionTestProfile.class) (1)
public class CommandsActionTest {
@Test
@Launch(value = {})
public void testLaunchCommand(LaunchResult result) throws IOException {
assertThat(Path.of(System.getProperty("java.io.tmpdir") + "/temp-github-output.txt")).content()
.contains("testOutputKey=test output value" + System.lineSeparator());
}
public static class CommandsActionTestProfile implements QuarkusTestProfile {
@Override
public Set<Class<?>> getEnabledAlternatives() {
return Set.of(MockInputsInitializer.class, MockCommandsInitializer.class);
}
}
@Alternative
@Singleton
public static class MockInputsInitializer implements InputsInitializer {
@Override
public Inputs createInputs() {
return new DefaultTestInputs(Map.of(Inputs.ACTION, CommandsAction.ACTION_NAME)); (2)
}
}
@Alternative
@Singleton
public static class MockCommandsInitializer implements CommandsInitializer {
@Override
public Commands createCommands() {
try {
Path githubOutputPath = Path.of(System.getProperty("java.io.tmpdir") + "/temp-github-output.txt");
Files.deleteIfExists(githubOutputPath);
return new CommandsImpl(Map.of(EnvFiles.GITHUB_OUTPUT, githubOutputPath.toString()));
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
}
1 | We use a test profile to push alternative beans for InputsInitializer and CommandsInitializer ,
allowing to provide inputs and a suitable environment for output command execution. |
2 | DefaultTestInputs is provided by:
|
You can find more test examples in the Quarkus GitHub Action integration-tests
module.