O termo "Mock Objects" é utilizado para descrever um caso especial de objetos que imitam objetos reais para teste.
As ideias e conceitos por trás dos Mock Objects surgiram através de muita experimentação, discussão e colaboração entre diversos desenvolvedores que tinham uma ideia e a evoluíram para algo mais profundo resultando em algo extremamente útil para os desenvolvedores de software.
Existem diversas razões para utilizarmos Mock Objects em nossos sistemas. Nos testes unitários podemos simular o comportamento de objetos reais complexos, principalmente quando estes objetos são difíceis de serem incorporados nos testes de unidade. Um exemplo disso é uma chamada remota que pode ser simulada com Mock Objects.
Uma das limitações dos Mocks é quando temos um excesso de objetos Mocks como parte de uma suíte de testes, pois quando temos modificações no código é preciso fazer um grande número de modificações nos testes. Manutenções incorretas também podem gerar erros que podem passar despercebidos, estes erros só seriam vistos quando os testes unitários utilizassem instâncias de classes reais.
Os testes com muitos Mocks ocultam problemas na colaboração entre objetos, sendo necessário também realizarmos testes de integração.
Ferramentas de Auxílio para Criação de Mocks
Diversas linguagens de programação ou ambientes de desenvolvimento possuem bibliotecas para criar Mocks.
Para Java temos o JMockit, Mockito, EasyMock, JMock, MockCreator, MockLib e HibernateMock.
Para plataforma .NET temos o NMockLib, Rhino Mocks, NMock e NMock 2 TypeMock.
Para o Ruby temos o Mocha, RSpec e FlexMock.
Para linguagem PHP temos o SimpleTest, Yay! Mock, SnapTest e PHPUnit.
Fontes:
http://www.devmedia.com.br/mocks-introducao-a-automatizacao-de-testes-com-mock-object/30641