Não.
Os testes de unidade devem permitir refatorar ou reescrever o código com segurança, mostrando que tudo ainda funciona como deveria. Mas se o código de teste estiver acoplado aos detalhes de implementação da unidade, você terá que modificar o teste ao mesmo tempo quando alterar o código. O que significa que você pode facilmente introduzir erros, e todo o benefício dos testes de unidade é perdido.
Em suma, os testes unitários devem verificar se os requisitos da unidade são atendidos, mas não se importam com os detalhes da implementação.
É por isso que é uma má prática testar métodos privados. Métodos privados devem ser detalhes de implementação. O mesmo vale para verificar se um método privado é chamado ou não, ou em que ordem.
No seu caso, o comportamento esperado é algum nível de correspondência difusa. Qual algoritmo é usado e se é implementado em um ou mais métodos é um detalhe de implementação.
Imagine que você encontre um algoritmo de correspondência fuzzy melhor que tenha a propriedade de ser tão rápido ou mais rápido quanto uma correspondência normal de string quando houver uma correspondência exata. Isso permite que você pule a caixa especial da correspondência exata. Essa seria uma melhoria que preservaria o comportamento esperado - mas isso faria com que seu teste falhasse! O teste impede você de melhorar o código.
Ou você pode perceber que, se Forename
tiver uma correspondência exata, mas Surname
não, então não há motivo para realizar uma correspondência fuzzy on Forename
novamente. Mas, para evitar isso, será necessária uma reestruturação da ordem das chamadas de método, portanto, muito provavelmente, o teste impedirá essa alteração novamente, embora o comportamento permaneça correto O desempenho e foi aprimorado. Então o teste tem valor negativo.
Mas eu entendo que você quer garantir que comparar strings que são totalmente iguais não seja significativamente mais lento devido ao algoritmo fuzzy. Eu vejo duas possibilidades:
- o benefício de desempenho para essa otimização é insignificante
- o benefício de desempenho é significativo
Se for insignificante, você não deve perder tempo em testá-lo. Se for significativo, você deve testá-lo, mas você deve testar o desempenho real (ciclos de tempo ou processador), e não detalhes de implementação irrelevantes.