Mas o menos. Si son demasiado similares, entonces sí, eso es algo malo. Su prueba no debe codificarse de la misma manera que el código que está probando. Por lo tanto, debe definir (1) una expectativa y (2) una implementación.
Me gusta pensar que es similar a la contabilidad de doble entrada . Un sistema de contabilidad siempre realiza al menos 2 entradas (un débito y un crédito). Esta es una medida de comprobación de errores. Al final del día, los débitos y los créditos tienen que equilibrarse, o de lo contrario hubo un error. No puede tener un sistema de detección de errores sin alguna forma de redundancia.
Considere un CRC por ejemplo. Su byte CRC es una forma de redundancia. Es suficiente para detectar cualquier pequeño error en la señal. Del mismo modo, los CD de audio tienen mucha información redundante, por lo que aún se reproducen perfectamente si están rayados. ¿Eso viola el principio DRY? Probablemente, pero así es como obtienes confiabilidad.
También hay otra forma de verlo:
Su prueba es la respuesta autorizada. El código que prueba es generado automáticamente por usted, el código mono. Si pudiéramos generar automáticamente el código basado en pruebas unitarias (como si autogeneramos capas de acceso a datos basadas en un esquema de base de datos), no estaríamos violando el principio DRY (o al menos no el principio OAOO).