Qual é a diferença entre o gtest e o gmock?
google-mock
, o framework do Google para zombar de C++ .
Já trabalhei com gtest
antes, mas ainda não consigo entender o que é gmock
. Para que precisamos dele?
gtest
é utilizado para testes unitários. Para que precisamos então de gmock
se gmock
é necessário para unit testing
?
3 answers
"o Google Mock não é um framework de testes em si. Em vez disso, precisa de um quadro de testes para escrever testes. O Google Mock funciona perfeitamente com o Google Test. Vem com uma cópia do Teste Google empacotado. A partir da Versão 1.1.0, você também pode usá-lo com qualquer framework de testes c++ de sua escolha. "- Google Mock, Requisitos Do Sistema
Mock são como objectos, definidos de tal forma que imitam o real-deal, fornecendo comportamento controlado. Por exemplo, para testar uma carraça de estoque aplicação, você criaria um fornecedor de dados de ações falsas que criou cotações de ações falsas para testar o seu código com. Pense na palavra gozar, significa literalmente "imitar".
O Gtest é uma estrutura para testes unitários. Gmock é uma estrutura que imita o resto do seu sistema durante os testes de unidade.
Então, em vez disso, você escreve algo que satisfaz a mesma interface que o site web/banco de dados / sensor / qualquer coisa, mas que você programou para produzir certas respostas "enlatadas" (erros, timeouts, dados inconsistentes, etc.) Seus testes agora vão correr muito mais rápido (porque eles não enfrentam a sobrecarga de uma Web real site/Base de dados / sensor / qualquer coisa), e eles são previsíveis. Infelizmente, é preciso um monte de codificação para escrever um site "mock" separado Web/Banco de dados/sensor/qualquer coisa para cada cenário que você precisa testar. Quanto mais trabalho for, menor a probabilidade de o fazer. Resultado: código testado inadequadamente.
O Gmock e os seus parentes automatizam muitas destas coisas, para que possa especificar o comportamento desejado "enlatado" no meio do próprio teste, ao custo de apenas algumas linhas de código. Se os testes são fáceis para escrever, é provável que você escreva mais deles, e portanto mais provável que descubra bugs antes de enviar o código: -)
BTW, isso implica que você também precisa de "injeção de dependência": o seu código precisa ter um parâmetro do tipo de interface, e você precisa ser capaz de passar em um objeto mock (para teste de unidade) ou o "real" site/banco de dados/sensor/qualquer coisa (para uso no mundo real).