Font Size

SCREEN

Profile

Layout

Direction

Menu Style

Cpanel

Aninki Code

PowerMock

PowerMock es un framework que  extiende otras bibliotecas de testeo como EasyMock ó Mockito para aumentar las capacidades de testeo.

+ INFO

PowerMock - Mock de un constructor

El funcionamiento de powermock es muy similar al de otras librerias de mock.

Primero definimos que se va a ejecutar con Powermock nuestro test (@RunWith(PowerMockRunner.class)) y la clase sobre la que vamos a realizar el test (@PrepareForTest(ClassToTest.class))

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ClassToTest.class)
NombreUsuario usuarioMock= PowerMock.createMock(NombreUsuario.class);

Despues definimos que esperamos obtener

expectNew(NombreUsuario.class, "Aninkinet").andReturn(usuarioMock);
expect(usuarioMock.getNombre()).andReturn( "Aninkinet");

En este punto guardamos el estado de nuestra grabación

replay(usuarioMock, NombreUsuario.class);

Ejecutamos nuestra clase real y lo comprobamos contra el mock que hemos creado

ClassToTest clazz=new ClassToTest();
String pintar=clazz.pintar("Hola");
System.out.println(pintar);
assertEquals(pintar,"Aninkinet ha solicidatos Hola" );
verify(usuarioMock, NombreUsuario.class);

Ejemplo Completo

package com.aninki.powermock.constructor;

public class ClassToTest {
	
	ClassToTest(){}
	
	ClassToTest(String cadena){
		NombreUsuario nombre=new NombreUsuario();
		//return  nombre.getNombre()+ " ha solicidatos"+ cadena;
	}
		public String pintar(String cadena){
			NombreUsuario nombre=new NombreUsuario("Aninkinet");
			return  nombre.getNombre()+ " ha solicidatos "+ cadena;
			
		}

}

package com.aninki.powermock.constructor;

public class NombreUsuario {

	private String nombre;

	public NombreUsuario(){}
	
	public NombreUsuario(String nombre){
		this.nombre=nombre;
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
}

package com.aninki.powermock.constructor;

import static org.powermock.api.easymock.PowerMock.expectNew;
import static org.powermock.api.easymock.PowerMock.replay;
import static org.powermock.api.easymock.PowerMock.verify;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.easymock.EasyMock.expect; 
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@RunWith(PowerMockRunner.class) 
@PrepareForTest(ClassToTest.class)
public class TestClass {

	
	@Test
	public  void pintar() {
		
		NombreUsuario usuarioMock= PowerMock.createMock(NombreUsuario.class);
	
		try {
		  	expectNew(NombreUsuario.class, "Aninkinet").andReturn(usuarioMock);
		  	expect(usuarioMock.getNombre()).andReturn( "Aninkinet");
			 replay(usuarioMock, NombreUsuario.class);
			 ClassToTest clazz=new ClassToTest();
			 String pintar=clazz.pintar("Hola");
			 System.out.println(pintar);
			 assertEquals(pintar,"Aninkinet ha solicidatos Hola" );
			 verify(usuarioMock, NombreUsuario.class);
			 
		
		} catch (Exception e) {
			
			e.printStackTrace();
		}
	}

}

PowerMock - Mock clase final

Este ejemplo ha sido extraido desde la página oficial del proyecto http://code.google.com/p/powermock/

Primero definimos que se va a ejecutar con Powermock nuestro test (@RunWith(PowerMockRunner.class)) y la clase sobre la que vamos a realizar el test (@PrepareForTest(IdGenerator.class))

@RunWith(PowerMockRunner.class) 
@PrepareForTest(IdGenerator.class)

Creamos una instancia de la clase a testear

     StateHolder stateHolderMock = createMock(StateHolder.class);
     StateFormatter tested = new StateFormatter(stateHolderMock); 

Después creamos el mock estatico y definimos que esperamos obtener

	  expect(stateHolderMock.getState()).andReturn(expectedState);

En este punto guardamos el estado de nuestra grabación

        replay(stateHolderMock);

Ejecutamos nuestra clase real y lo comprobamos contra el mock que hemos creado

final String actualState = tested.getFormattedState();
                verify(stateHolderMock);
                assertEquals(expectedState, actualState);

Ejemplo Completo

package com.aninki.powermock.finalclass;

public class StateFormatter {

    private final StateHolder stateHolder;

    public StateFormatter(StateHolder stateHolder) {
            this.stateHolder = stateHolder;
    }

    public String getFormattedState() {
            String safeState = "State information is missing";
            final String actualState = stateHolder.getState();
            if (actualState != null) {
                    safeState = actualState;
            }
            return safeState;
    }
}
package com.aninki.powermock.finalclass;

public final class StateHolder {

    public final String getState() {
            // Imagine that we query a database for state
            return null;
    }
  
    public final void setState(String state) {
            // Imagine that we store the state in a database.
    }
}

package com.aninki.powermock.finalclass;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import static org.powermock.api.easymock.PowerMock.*;


@RunWith(PowerMockRunner.class)
@PrepareForTest(StateHolder.class)
public class StateFormatterTest {

        @Test
        public void testGetFormattedState_actualStateExists() throws Exception {
                final String expectedState = "state";

                StateHolder stateHolderMock = createMock(StateHolder.class);
                StateFormatter tested = new StateFormatter(stateHolderMock);

                expect(stateHolderMock.getState()).andReturn(expectedState);

                replay(stateHolderMock);

                final String actualState = tested.getFormattedState();

                verify(stateHolderMock);

                assertEquals(expectedState, actualState);
        }

        @Test
        public void testGetFormattedState_noStateExists() throws Exception {
                final String expectedState = "State information is missing";

                StateHolder stateHolderMock = createMock(StateHolder.class);
                StateFormatter tested = new StateFormatter(stateHolderMock);

                expect(stateHolderMock.getState()).andReturn(null);

                replay(stateHolderMock);

                final String actualState = tested.getFormattedState();

                verify(stateHolderMock);

                assertEquals(expectedState, actualState);
          
                resetAll();
        }
}

PowerMock - Mock propiedades del sistema

Este ejemplo ha sido extraido desde la página oficial del proyecto http://code.google.com/p/powermock/

Primero definimos que se va a ejecutar con Powermock nuestro test (@RunWith(PowerMockRunner.class)) y la clase sobre la que vamos a realizar el test (@PrepareForTest(System.class))

@RunWith(PowerMockRunner.class) 
@PrepareForTest(System.class)

Creamos una mock de la

 mockStatic(System.class);

Despues definimos qué esperamos obtener

expect(System.getProperty("line.separator")).andReturn("propiedad creada por mi");

En este punto guardamos el estado de nuestra grabación

replayAll();

Ejecutamos nuestra clase real y lo comprobamos contra el mock que hemos creado

 System.out.println(System.getProperty("line.separator"));
 verifyAll();

Ejemplo completo

package com.aninki.powermock.system;

import static org.easymock.EasyMock.expect;
import static org.powermock.api.easymock.PowerMock.mockStatic;
import static org.powermock.api.easymock.PowerMock.replayAll;
import static org.powermock.api.easymock.PowerMock.verifyAll;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(System.class)
public class TestSystemProperties {

	/**
	 * @param args
	 */
	@Test
	public void pintar() {

		mockStatic(System.class);

		expect(System.getProperty("line.separator")).andReturn(
				"propiedad creada por mi");

		replayAll();
		System.out.println(System.getProperty("line.separator"));

		verifyAll();
	}

}

PowerMock - Mock método estatico

Este ejemplo ha sido extraido desde la página oficial del proyecto http://code.google.com/p/powermock/

Primero definimos que se va a ejecutar con Powermock nuestro test (@RunWith(PowerMockRunner.class)) y la clase sobre la que vamos a realizar el test (@PrepareForTest(IdGenerator.class))

@RunWith(PowerMockRunner.class) 
@PrepareForTest(IdGenerator.class)

Creamos una instancia de la clase a testear

  ServiceRegistrator tested = new ServiceRegistrator();

Despues creamos el mock estatico y definimos que esperamos obtener

	  mockStatic(IdGenerator.class);
	  expect(IdGenerator.generateNewId()).andReturn(expectedId);

En este punto guardamos el estado de nuestra grabación

       replay(IdGenerator.class);

Ejecutamos nuestra clase real y lo comprobamos contra el mock que hemos creado

			   verify(IdGenerator.class);
			   assertEquals(expectedId, actualId);

Ejemplo Completo

package com.aninki.powermock.staticMethod;

public class IdGenerator {

    
        public static long generateNewId() {
                return System.currentTimeMillis();
        }
}

package com.aninki.powermock.staticMethod;

import java.util.HashMap;
import java.util.Map;

public class ServiceRegistrator {

     
        private final Map serviceRegistry = new HashMap();

        public long registerService(Object service) {
                final long id = IdGenerator.generateNewId();
                serviceRegistry.put(id, service);
                return id;
        }

}

package com.aninki.powermock.staticMethod;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import static org.powermock.api.easymock.PowerMock.*;


@RunWith(PowerMockRunner.class)
@PrepareForTest(IdGenerator.class)
public class TestStaticMethod {

        @Test
        public void registersServiceToRepository() throws Exception {
                long expectedId = 42;

                ServiceRegistrator tested = new ServiceRegistrator();
                
                mockStatic(IdGenerator.class);

                expect(IdGenerator.generateNewId()).andReturn(expectedId);
             
                replay(IdGenerator.class);

                long actualId = tested.registerService(new Object());
             
                verify(IdGenerator.class);

                assertEquals(expectedId, actualId);
        }
}