When designing an automated test at any level, it is worth considering if you can make that test more data-driven.
Rather than hard-coding the input values and expected results into the test logic, separate them out.
The Spock framework has some elegant support built in for data-driven tests, …
… but you can also do similar in good old JUnit and TestNG
Why?
As explained in the Spock docs:
- Code and data are not mixed together and can be changed independently more easily
- Data for the tests can be generated using some other tool or fetched from external sources
- it is easy to increase useful test coverage by adding different input data and expected output data to the same scenario
The built-in support in the automated test framework means that:
- In order to exercise the same code multiple times, it does not have to be duplicated or extracted into a separate method
- In case of a failure, it is immediately clear which inputs caused the failure
- Exercising the same code multiple times benefits from the same isolation as executing separate methods does