Qual é a diferença entre o gtest e o gmock?

Estou a tentar entender o propósito de ... google-mock, o framework do Google para zombar de C++ .

Já trabalhei com gtestantes, 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?

Author: Fabio Turati, 2012-12-04

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".

 33
Author: dans3itz, 2012-12-04 06:21:54
As unidades de Software não vivem em prados verdes. Eles muitas vezes precisam de alguns homólogos para fazer o trabalho. No sistema real, estas contrapartidas pertencem ao próprio sistema. Nos testes da unidade, eles são substituídos por zombarias.

O Gtest é uma estrutura para testes unitários. Gmock é uma estrutura que imita o resto do seu sistema durante os testes de unidade.

 22
Author: Thinkeye, 2013-04-19 10:15:47
Suponha que você está escrevendo um pedaço de código que precisa interagir com um sistema externo imprevisível, caro (por exemplo, um site, um banco de dados grande, um sensor físico, etc.).) O seu código precisa continuar a funcionar quando o sistema externo pára, ou lhe dá mensagens de erro, ou lhe dá dados inconsistentes. Como você pode testar se seu código realmente cumpre esses requisitos? Bem, podes compará-lo com um site/Base de dados/sensor / seja lá o que for, um monte de vezes., e espero que você tenha sorte em todas as condições de erro que seu código deve lidar. Obviamente uma estratégia de teste bastante cara e pouco confiável.

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).

 8
Author: Stephen Bloch, 2015-04-13 19:54:24