You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TL;DR I am drawn to a conclusion that e2e testing for all input types will make test development and runs longer - with little impact on quality. I'd rather focus on better unit testing, as per observations, below.
With a lot of test development done in #82 it is time to garther some thoughts on how to meaningully test this lib.
First of all: #82 has been a constant source of new issues, like #104#107 or #83 which means e2e really do impact the quality of our work here. It's a trivial conclusion but still - nice to confirm.
Next: I've started with a pipeline running parameterized tests for all types of inputs. This was quickly reduced by one, when we decided to drop BlueprintBuilder as an input type with #98 With this done, I took a moment to examine the main process flow and see how it could be tested best.
The process is initiated with the run_blueprint function; the DI, runtine and env are set up first.
The input is preprocessed with parseAndCompile:
Parsing depends on the type of the input:
for a JSON string it is decoded and validated. and mapped to a Blueprint,
for a stdClass it is validated and also mapped to a Blueprint,
and a Blueprint is just validated.
Compiling always takes a Blueprint and returns a CompiledBlueprint. At this point all paths have allready converged.
The CompiledBlueprint is run by the BlueprintRunner. Each run produces a result which is an array of StepSuccess or BlueprintRunnerException. At this point it time, the return from the runner is not transformed in any way or form by the engine or the most external run_blueprint function.
Observations:
Both validation and mapping are identical for a JSON string and stdClass.
Decoding is done trivially with json_decode so there is nothing to trully test.
Mapping is done via the BlueprintMapper I wrote some time ago. I'd gladly test it more thoroughly but this can be done via unit tests.
Validation is done identically for all types, with a small caveat for the Blueprint type. This is a work-around so it is likely to be rewritten. But either way it can be completely tested with unit tests.
For top notch quality parseAndCompile could be tested as a whole subprocess. Those test will be quick, so there is little worry for test execution times if they are run for all input types.
What actually makes E2E tests run long is the downloading and installing of resources. So doing it trice mostly triples the pipeline execution flow, with no return on investment.
The text was updated successfully, but these errors were encountered:
TL;DR I am drawn to a conclusion that e2e testing for all input types will make test development and runs longer - with little impact on quality. I'd rather focus on better unit testing, as per observations, below.
With a lot of test development done in #82 it is time to garther some thoughts on how to meaningully test this lib.
First of all: #82 has been a constant source of new issues, like #104 #107 or #83 which means e2e really do impact the quality of our work here. It's a trivial conclusion but still - nice to confirm.
Next: I've started with a pipeline running parameterized tests for all types of inputs. This was quickly reduced by one, when we decided to drop
BlueprintBuilder
as an input type with #98 With this done, I took a moment to examine the main process flow and see how it could be tested best.run_blueprint
function; the DI, runtine and env are set up first.parseAndCompile
:Blueprint
,Blueprint
,Blueprint
is just validated.Blueprint
and returns aCompiledBlueprint
. At this point all paths have allready converged.CompiledBlueprint
is run by theBlueprintRunner
. Each run produces a result which is an array ofStepSuccess
orBlueprintRunnerException
. At this point it time, the return from the runner is not transformed in any way or form by the engine or the most externalrun_blueprint
function.Observations:
json_decode
so there is nothing to trully test.BlueprintMapper
I wrote some time ago. I'd gladly test it more thoroughly but this can be done via unit tests.Blueprint
type. This is a work-around so it is likely to be rewritten. But either way it can be completely tested with unit tests.parseAndCompile
could be tested as a whole subprocess. Those test will be quick, so there is little worry for test execution times if they are run for all input types.The text was updated successfully, but these errors were encountered: