Preciso bancar um advogado do diabo nessa questão, porque não posso defendê-la bem por falta de experiência. Aqui está o acordo, eu recebo conceitualmente as diferenças entre teste de unidade e teste de integração. Ao se concentrar especificamente nos métodos de persistência e no repositório, um teste de unidade usaria uma simulação, possivelmente por meio de uma estrutura como o Moq, para afirmar que o pedido pesquisado foi retornado conforme o esperado.
Digamos que eu criei o seguinte teste de unidade:
[TestMethod]
public void GetOrderByIDTest()
{
//Uses Moq for dependency for getting order to make sure
//ID I set up in 'Arrange' is same one returned to test in 'Assertion'
}
Portanto, se eu configurar OrderIdExpected = 5
e meu objeto simulado retornar 5
como o ID, meu teste passará. Entendi. Eu testei o código da unidade para garantir que o meu código pré-formado retorne o objeto e o ID esperados e não outra coisa.
O argumento que receberei é o seguinte:
"Por que não pular os testes de unidade e fazer testes de integração? É importante testar o procedimento armazenado do banco de dados e seu código. Parece muito trabalho extra ter testes de unidade e testes de integração quando, no final das contas, quero saber se o banco de dados chama e o código funciona. Sei que os testes levam mais tempo, mas precisam ser executados e testados independentemente, portanto, para mim parece inútil ter os dois. Apenas teste o que importa. "
Eu poderia defendê-lo com uma definição de livro de texto como: "Bem, isso é um teste de integração e precisamos testar o código separadamente como um teste de unidade e, yada, yada, yada ..." Esse é um caso em que uma explicação purista das práticas vs. a realidade está perdendo. Às vezes me deparo com isso e, se não consigo defender o raciocínio por trás do código de teste de unidade que, em última análise, depende de dependências externas, não posso argumentar.
Qualquer ajuda sobre esta questão é muito apreciada, obrigado!