una tipos paso parametros modificadores miembros metodos ejemplos ejemplo constructores clases clase atributos acceso java testing mockito easymock powermock

tipos - paso de parametros en java ejemplo



¿Cómo se burla el método privado que modifica las variables privadas? (3)

A condición de que otras respuestas señalen que esos casos de prueba son frágiles y que los casos de prueba no deben basarse en la implementación y deben depender del comportamiento si aún desea burlarse de ellos, a continuación se incluyen algunas maneras:

PrivateMethodDemo tested = createPartialMock(PrivateMethodDemo.class, "sayIt", String.class); String expected = "Hello altered World"; expectPrivate(tested, "sayIt", "name").andReturn(expected); replay(tested); String actual = tested.say("name"); verify(tested); assertEquals("Expected and actual did not match", expected, actual);

Así es como lo harías con PowerMock.

expectPrivate () de PowerMock hace esto.

Casos de prueba de PowerMock que prueban el método privado burlándose

ACTUALIZACIÓN: burla parcial con PowerMock hay algunas renuncias y capturas

class CustomerService { public void add(Customer customer) { if (someCondition) { subscribeToNewsletter(customer); } } void subscribeToNewsletter(Customer customer) { // ...subscribing stuff } }

Luego, crea una simulación PARCIAL de CustomerService, que proporciona una lista de los métodos que desea simular.

CustomerService customerService = PowerMock.createPartialMock(CustomerService.class, "subscribeToNewsletter"); customerService.subscribeToNewsletter(anyObject(Customer.class)); replayAll(); customerService.add(createMock(Customer.class));

Entonces add() dentro del simulacro CustomerService es lo REAL que desea probar y para el método subscribeToNewsletter() ahora puede escribir una expectativa como de costumbre.

¿Cómo se burla el método privado que modifica las variables privadas?

class SomeClass{ private int one; private int second; public SomeClass(){} public int calculateSomething(){ complexInitialization(); return this.one + this.second; } private void complexInitialization(){ one = ... second = ... } }


Power Mock podría ayudarte aquí. Pero, en general, protegería el método y anularía el método previamente privado de hacer lo que quisiera.


No , porque su prueba dependerá de los detalles de implementación de la clase que está probando y, por lo tanto, será frágil. Podría refactorizar su código de modo que la clase que está probando actualmente dependa de otro objeto para hacer este cálculo. Entonces puedes burlarte de esta dependencia de la clase bajo prueba. O deja los detalles de implementación a la clase en sí y prueba suficientemente su comportamiento observable.

El problema que podría sufrir es que no está exactamente separando comandos y consultas a su clase. calculateSomething parece más a una consulta, pero complexInitialization es más un comando.