I am using JenkinsPipelineUnit to add some simple unit testing to my Jenkins shared-library. I may add some proper integration testing at a later date which I could solve this problem with, but I’d prefer to do it by unit test if possible.
I love the library btw, it works really nicely.
So, I my problem is that I would like to test some conditional logic that:
- I run unit tests
- If test fail, I use
catchError()to catch the error and continue pipeline execution (while marking the stage & pipeline UNSTABLE) because I want to… - Publish/attach the test report to Jenkins - using
publishHTML,junit, whatever, it doesn’t really matter too much. - The settings for capturing the test report should be such
allowEmpty = falseso if there was a larger error during unit test execution, like a compile error, instead of a simple assertion error, the test report file is not created, and the stage & pipeline will result in a proper error and exit immediately.
I have this logic setup correctly for real pipeline execution and I would now like to add a unit test for it.
I have added this to my BasePipelineTest class to mock the output of publishHTML and I just got this from a real pipeline execution log and modified it so that it will change with input options:
helper.registerAllowedMethod('publishHTML', [Map], { Map args ->
println('[htmlpublisher] Archiving HTML reports...')
println("[htmlpublisher] Archiving at BUILD level /home/jenkins/agent/workspace/test/test-job/${args.reportDir} to ${URLEncoder.encode(args.reportName, 'UTF-8')}")
println('[htmlpublisher] Copying recursive using current thread')
})
Now I can see this output right at the top of my callstack output for some reason, instead of where the publishHTML method is called, which is a bit odd, and I was wondering if I could somehow mock the previous test command (./gradlew test or mvn verify or whatever test command is ran before) to create (or not create) a file, and then I can test this publishHTML bit properly.
Or…is this all too close to an integration test and I should just do that?