Estou lendo A Arte do Teste de Unidade, de Roy Osherove. Estou na seção 7.2. Escrevendo testes de manutenção em que o autor tem essa observação sobre o cheiro do código:
NOTA: Quando você refatorar o estado interno para ser visível para um teste externo, ele poderá ser considerado um cheiro de código (um sinal de que algo pode estar errado no design ou na lógica do código)? Não é um cheiro de código quando você está refatorando para expor colaboradores. É um cheiro de código se você estiver refatorando e não houver colaboradores (para que você não precise stub ou zombar de nada).
EDIT : O que o autor quer dizer com "colaboradores" são dependências. Alguns de seus exemplos de dependências são classes que acessam um banco de dados ou que acessam o sistema de arquivos do sistema operacional. Aqui é onde ele define o stub e começa a usar a palavra colaborador:
Um stub é um substituto controlável para uma dependência (ou colaborador ) existente no sistema.
O autor não tem um exemplo desse cheiro de código e estou tendo problemas para entender / imaginar como isso seria. Alguém pode explicar isso um pouco mais e talvez fornecer um exemplo concreto?