Oi Rafael,
Obrigado pelo post!
Geração automática de testes é um hot topic na academia. E bem legal de ver sua implementação; simples e funcional! Existem ferramentas como o Randoop [1], que também geram testes baseados em entradas aleatórias.
O problema é que você pode ser azarado e ainda assim não cobrir todo seu código. Por isso, há estratégias mais modernas, como por exemplo, algoritmos baseados em busca aliados a cobertura de código: dado um branch que você quer cobrir, o algoritmo busca a solução por meio de um algoritmo genético. A implementação mais famosa pra isso em Java é o EvoSuite [2]. Ele vai tentar gerar testes com 100% de cobertura pra vc.
Em algum momento do post, entendi que você também queria testar ifs complicados. Em ifs, minha estratégia geralmente é MC/DC (Modified Condition/Decision Coverage). Ela me ajuda a pensar nos cenários que realmente devo exercitar no meu if complicado, sem precisar exercitar todos, pq senão é demais. Se você procurar no Youtube, tem vídeos legais explicando como MC/DC funciona. Depois, boundary analysis. Ou seja, análise das fronteiras; if(n>10), 10 é uma fronteira interessante nesse if. Googla por in and out, on and off points. Eu geralmente escrevo um teste para o in point.
Espero ter contribuído!
Um abraço,