  Unit testing is a critical part of software development process, ensuring the
correctness of basic programming units in a program (e.g., a method).
Search-based software testing (SBST) is an automated approach to generating
test cases. SBST generates test cases with genetic algorithms by specifying the
coverage criterion (e.g., branch coverage). However, a good test suite must
have different properties, which cannot be captured by using an individual
coverage criterion. Therefore, the state-of-the-art approach combines multiple
criteria to generate test cases. As combining multiple coverage criteria brings
multiple objectives for optimization, it hurts the test suites' coverage for
certain criteria compared with using the single criterion. To cope with this
problem, we propose a novel approach named \textbf{smart selection}. Based on
the coverage correlations among criteria and the coverage goals' subsumption
relationships, smart selection selects a subset of coverage goals to reduce the
number of optimization objectives and avoid missing any properties of all
criteria. We conduct experiments to evaluate smart selection on $400$ Java
classes with three state-of-the-art genetic algorithms. On average, smart
selection outperforms combining all goals on $65.1\%$ of the classes having
significant differences between the two approaches.
