Mais ou menos. Se eles são muito parecidos, então sim, isso é uma coisa ruim. Seu teste não deve ser codificado da mesma maneira que o código que está testando. Portanto, você deve definir (1) uma expectativa e (2) uma implementação.
Eu gosto de pensar que é semelhante à contabilidade de entrada dupla . Um sistema de contabilidade sempre faz pelo menos 2 entradas (um débito e um crédito). Esta é uma medida de verificação de erro. No final do dia, os débitos e os créditos precisam ser equilibrados, caso contrário, ocorreu um erro. Você não pode ter um sistema de detecção de erros sem alguma forma de redundância.
Considere um CRC, por exemplo. Seu byte CRC é uma forma de redundância. É o suficiente para detectar qualquer pequeno erro no sinal. Da mesma forma, os CD de áudio têm muitas informações redundantes, portanto ainda tocam perfeitamente se forem arranhadas. Isso viola o princípio DRY? Provavelmente, mas é assim que você obtém confiabilidade.
Há outra maneira de ver também:
Seu teste é a resposta oficial. O código testado é gerado automaticamente por você, o macaco do código. Se pudéssemos gerar automaticamente código com base em testes de unidade (como geramos automaticamente camadas de acesso a dados com base em um esquema de banco de dados), não estaríamos violando o princípio DRY (ou pelo menos não o princípio OAOO).