Após tornar open-source seu framework C++ de teste a poucos meses atrás, o Google acabou de repetir o movimento com o Google C++ Mocking Framework (Google Mock) sob a BSD license.
O Google Mock é usado em mais de 100 projetos no Google e é inspirado pelo jMock e EasyMock, de acordo com Zhanyong Wan, um engenheiro de software do Google. O framework pode ser usado no Linux, Windows ou Mac OS X e é direcionado a desenvolvedores C++. Zhanyong exemplifica o mocking:
class TaxServer { // Returns the tax rate of a location (by postal code) or -1 on error.
virtual double FetchTaxRate(
const string& postal_code) = 0;
virtual void CloseConnection() = 0;
};class MockTaxServer : public TaxServer { // #1
MOCK_METHOD1(FetchTaxRate, double(const string&));
MOCK_METHOD0(CloseConnection, void());
};
TEST(ShoppingCartTest, StillCallsCloseIfServerErrorOccurs) {
MockTaxServer mock_taxserver; // #2
EXPECT_CALL(mock_taxserver, FetchTaxRate(_)).WillOnce(Return(-1)); // #3
EXPECT_CALL(mock_taxserver, CloseConnection());
ShoppingCart cart(&mock_taxserver); // #4
cart.CalculateTax(); // Calls FetchTaxRate()
// and CloseConnection().
} // #5
Derive uma classe mock de uma interface. Para cada método virtual, conte quantos argumentos ela tem, nomeie o resultado n e a defina usando MOCK_METHODn, aqueles arguemtnos são o nome e o tipo do método.
Crie uma instância da classe Mock. Ela será usada onde você normalmente usaria o objeto real.
Defina as expectativas do Mock Object (Como ele será usado? O que ele vai fazer?). Por exemplo, o primeiro EXPECT_CALL diz que FetchTaxRate() será chamado e irá retornar um erro. O underscore (_) é um matcher que diz que o argumento pode ser qualquer coisa. O Google Mock possue muitos matchers que você pode usar para especificar precisamente o que o argumento deve ser. Você pode também definir seu próprio matcher ou usar um valor exato.
Exercite código que usa o mock object. Você irá receber um erro imediatamente se o método mock for chamado mais vezes do que o esperado ou com argumentos errados.
Quando o mock object é destruído, ele verifica se todas as expectativas definidas foram atingidas.
Algins links úteis: Home Page. Docuementação Completa. Download. Google Mock para Iniciantes é uma introdução rápida ao Google Mock, acompanhado de exemplos e explicações.