  Unit testing verifies the presence of faults in individual software
components. Previous research has been targeting the automatic generation of
unit tests through the adoption of random or search-based algorithms. Despite
their effectiveness, these approaches do not implement any strategy that allows
them to create unit tests in a structured manner: indeed, they aim at creating
tests by optimizing metrics like code coverage without ensuring that the
resulting tests follow good design principles. In order to structure the
automatic test case generation process, we propose a two-step systematic
approach to the generation of unit tests: we first force search-based
algorithms to create tests that cover individual methods of the production
code, hence implementing the so-called intra-method tests; then, we relax the
constraints to enable the creation of intra-class tests that target the
interactions among production code methods.
