Oi Fernando,
entendo sua visão na questão da legibilidade e até passei por ambos os modelos: no JUnit3 a única opção era fazer um código que falhava quando passava impune por uma linha de código e passava apenas quando caía no catch. Ele ficava mais ou menos assim:
public void testCadastrarProdutoSemNomeCausaExcecao() {
try {
new Produto(null, 10.55);
Assert.assertTrue(false);
} catch (IllegalStateException e) {
Assert.assertTrue(true);
}
}
No começo, eu realmente estranhava a forma nova, com a configuração na anotação, mas com o tempo, meu olho foi treinando para enxergar o expected como parâmetro e, hoje, eu realmente acho mais bonito (e meu time acha que éramos loucos por fazer da outra forma) ter a versão muito mais reduzida que a anotação permite:
@Test(expected=IllegalArgumentException.class)
public void cadastrarProdutoSemNomeCausaExcecao() {
new Produto(null, 10.55);
}
Acredito mesmo ser uma questão de costume. Que tal perguntar a opinião do seu time sobre isso? :-)