Mocking HttpServletRequest / HttpServletResponse

Graças à forma como as classes para a API Servlet foram criadas, elas são completamente inúteis para qualquer coisa, exceto para compilar. Se você tentar simular as interfaces, poderá acabar com o seguinte:

Absent Code attribute in method that is not native or abstract in class file javax/servlet/http/Cookie

Suas opções são:
1. Depende de uma implementação real de Servlets, não da API
2. Implemente os mocks você mesmo

O primeiro significa que você está testando o comportamento específico de terceiros e provavelmente acaba jogando um jarro de 50 MB

O último significa que você tem dezenas de métodos para implementar e não recebe nenhuma sutileza como a contagem de invocação do EasyMock.

Ambos são péssimos.

Usei a segunda abordagem, da seguinte maneira

Autogenerate MockHttpServletRequest, implementando HttpServletRequest e adicione o seguinte método

private void crapOut() {
final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
String methodName = ste[2].getMethodName();
throw new UnsupportedOperationException("Unimplemented method:" + methodName);
}

Faça com que cada método na simulação chame esse método e retorne null / false / -1 / qualquer que seja

Em seguida, use os mocks no lugar de instâncias reais. Cada método chamado pelo código em teste irá falhar graças a crapOut (). Sempre que você ver uma dessas falhas, implemente o método com falha e tente novamente