Estou trabalhando com o seguinte sistema:
Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern
Recentemente, tivemos um problema em que atualizei a versão da biblioteca que estava usando, o que, entre outras coisas, causou que os carimbos de data / hora (retornados pela biblioteca de terceiros long
) fossem alterados de milissegundos após a época para nanossegundos após a época.
O problema:
Se eu escrever testes que zombam dos objetos da biblioteca de terceiros, meu teste estará errado se eu cometer um erro sobre os objetos da biblioteca de terceiros. Por exemplo, eu não percebi que os carimbos de data e hora alteravam a precisão, o que resultava em uma necessidade de alteração no teste de unidade, porque minha simulação retornou os dados incorretos. Isso não é um bug na biblioteca , aconteceu porque eu perdi algo na documentação.
O problema é que não posso ter certeza sobre os dados contidos nessas estruturas de dados porque não consigo gerar dados reais sem um feed de dados real. Esses objetos são grandes e complicados e possuem muitos dados diferentes. A documentação para a biblioteca de terceiros é ruim.
A questão:
Como posso configurar meus testes para testar esse comportamento? Não tenho certeza de que posso resolver esse problema em um teste de unidade, porque o teste em si pode facilmente estar errado. Além disso, o sistema integrado é grande e complicado e é fácil perder alguma coisa. Por exemplo, na situação acima, eu havia ajustado corretamente o tratamento do carimbo de data e hora em vários lugares, mas perdi um deles. O sistema parecia estar fazendo principalmente as coisas certas no meu teste de integração, mas quando o implantei na produção (que tem muito mais dados), o problema se tornou óbvio.
Não tenho um processo para meus testes de integração no momento. O teste é essencialmente: tente manter os testes de unidade bons, adicione mais testes quando as coisas quebrarem, implante no meu servidor de teste e verifique se as coisas parecem saudáveis, depois implante na produção. Esse problema de carimbo de data e hora passou nos testes de unidade porque as simulações foram criadas incorretamente; em seguida, passou no teste de integração porque não causou problemas imediatos e óbvios. Eu não tenho um departamento de controle de qualidade.
Timestamp
classe (contendo qualquer representação que eles querem) e fornecer métodos chamados ( .seconds()
, .milliseconds()
, .microseconds()
, .nanoseconds()
) e de construtores curso nomeados. Então não haveria problemas.