La burla normalmente funciona bien si usa la inversión de control y la inyección de dependencia para conectar sus servicios. Por lo que su persona debe ser similar
public class Person() {
WebService ws = null;
// or use setters instead of constructor injection
Persion(WebService ws) {
this.ws = ws;
}
public Person find(int id) {
return ws.getPersonById(id);
}
}
de esperar, está claro que con este cambio, ahora se puede crear un control simulado y se burlan de servicio Web y sólo tienes que conectarlo en su prueba, ya que cuando se crea la persona para poner a prueba , puedes pasar el simulacro al constructor (o al instalador si vas por esa ruta).
en su entorno real, el contenedor IoC inyectará el servicio web real en.
Ahora, si usted no quiere tratar con todas estas cosas COI, lo que hay que hacer es desacoplar el servicio web de su Persona (que debería llamarse PersonService o algo, no solo Person, que denota entidad). En otras palabras, la forma en que se escribe el código solo puede usar un tipo de servicio web. Es necesario para que sea lo que la persona sólo necesita un poco de tipo de servicio Web, no el específico que haya codificado de entrada.
Por último, en el código como está escrito, WebService es una clase, no una interfaz. El WebService debe ser una interfaz, y debe poner en algún tipo de implementación. EasyMock funciona bien con interfaces; podría simular clases concretas (hace tiempo que no lo usé), pero como principio de diseño debe especificar la interfaz requerida, no la clase concreta.
Lamento decirlo, pero es una pena. En mi humilde opinión, una de las mejores cosas del desarrollo basado en pruebas es que se ve obligado a pensar y replantear su diseño. Encontrar algo que no sea fácilmente comprobable frente a las interfaces es una buena señal de olor a código. @hvgotcodes ha trazado un buen camino, cómo puede hacer que su código sea más fácil de mantener, flexible y comprobable. No me gustaría tirar eso por una simple solución. –