Testar sequencialmente com JUnit

Galera, estou implementando a NF-e e existe uma serviço que é assíncrono, ou seja, envio uma requisição que me retorna um número de recibo. Esse número apesar de sequencial não segue um padrão de 1 em 1 ou 2 em 2, então quase que é um número “aleatório” de retorno. A partir desse número de recibo envio outra requisição para obter o resultado do processamento. Tenho outros testes como por exemplo o cancelamento de uma NF-e que exige uma chave de nota válida e processada e o cancelamento só acontece uma vez, ou seja, além de saber o número da chave, a cada teste preciso de um novo cancelamento.

Não sei se esse tipo de situação cabe em testes unitários. Eu criei aqui, porém além de passar esses números de recibo e chaves de acesso entre os métodos ainda preciso que sejam executados em uma sequência correta. O que você me recomendariam? Se não devo testar isso unitariamente como eu deveria proceder?

grato.

o problema é que nesse caso quando o teste quebra, você não tem certeza se o erro esta no seu código ou na resposta do servidor. O ideal seria criar objetos mock de resposta do servidor para isolar o teste.

Esse tipo de situação não é teste unitário. Um teste unitário verifica um elemento isolado (unidade), nesse caso está envolvendo chamadas pela rede, integração com outro sistema, mudanças de estado, etc.

Acaba acontecendo isso aqui:quote=orlandocn quando o teste quebra, você não tem certeza se o erro esta no seu código ou na resposta do servidor.(…)[/quote]

Mas isso significa que o que você está fazendo é errado?
De forma nenhuma! É só questão de usar os nomes certos: isso é um teste de integração automatizado.
O teste de integração tem finalidade diferente do teste unitário, ele serve para testar a integração (ah, jura? :slight_smile: ), o fluxo de negócio completo entre um sistema e outro.
Também pode ser feito com JUnit. Como ele trata os testes de forma independente um do outro (não guarda estado entre cada teste, podendo teoricamente chamar em qualquer ordem), uma maneira seria fazer essas chamadas em um único teste, verificando as condições que se aplicam em cada momento. Se uma das funções falhar, falha o teste inteiro.

Legal. Sim eu sabia que isso era teste de integração, só não sabia se eu deveria testar tudo em um método só. Um colega de trabalho sugeriu que eu testasse cada método de forma completa, por exemplo: o método de envio, faz o envio e a recepção, o método de cancelamento faz o envio da nota (em 2 fases) e com o retorno faz o cancelamento. Então acho que vou fazer dessa forma. Separo o teste unitário primeiramente usando mocks e depois faço o de integração. Acho que fechou!

Agradeço pelas respostas!