2010-11-28 21 views
21

Necesito simular entidad-administrador para hacer que la capa de servicio de prueba (en mi caso una fachada de sesión) sea independiente de la capa subyacente (que en mi caso es el administrador de entidad).¿Cómo burlarse de EntityManager?

Entonces, ¿cómo puedo lograr esto? ¿Debería usar dbunit? ¿Necesito easy/j (Mock)?

Respuesta

8

Sugiero usar Mockito Framework, es muy fácil de usar y comprender.

@Mock 
private EntityManager entityManager; 

Si desea utilizar cualquier método que pertenezca a entityManager, debe llamar.

Mockito.when(METHOD_EXPECTED_TO_BE_CALLED).thenReturn(AnyObjectoftheReturnType); 

Al ejecutar la prueba, cualquier llamada declarada Anteriormente: en el Mockito.when para el EntityManager devolverá el valor puesto en la declaración ..

Leer la documentación completa aquí.

https://static.javadoc.io/org.mockito/mockito-core/2.12.0/org/mockito/Mockito.html#stubbing

1

Para burlarse, sugiero powermock. Gracias a los proxies generados automáticamente, puede hacer prácticamente cualquier cosa que puedas imaginar, comenzando con la creación de simulacros desde interfaces, interceptando el final de inicialización con la supresión de la inicialización estática (lo único que me golpeó fue jugar con java.lang.Object burlándose).

Digamos que SessionFacadeTest es su conjunto de pruebas JUnit para SeesionFacade.

import static org.powermock.api.easymock.PowerMock.createMock; 
import static org.powermock.api.easymock.PowerMock.replayAll; 
import static org.powermock.api.easymock.PowerMock.verifyAll; 
import static org.easymock.EasyMock.anyObject; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 
import javax.persistence.EntityManager; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest({SessionFacade.class}) 
public class SessionFacadeTest { 
    @Test public void persistingObject() { 
     //set up stage 
     SessionFacade fixture = new SessionFacade(); 
     EntityManager managerMock = createMock(EntityManager.class); 
     fixture.setManager(managerMock); 
     //record expected behavior 
     managerMock.persist(anyObject()); 
     //testing stage 
     replayAll(); 
     fixture.anyMethodThatCallPersist(); 
     //asserting stage 
     verifyAll(); 
    } 
} 

(Nota: Lo escribí aquí, por lo que puede incluso no compilar, pero le dará la idea).

0

Normalmente uso EasyMock para burlar la implementación del servicio concreto en casos de prueba. Echa un vistazo a su user guide. Incluye una guía paso a paso muy fácil de seguir, que explica los conceptos básicos detrás de los marcos de burla en general y lo pone en marcha rápidamente con EasyMock.

+0

Dice página no encontrada, tal vez de actualizar su respuesta :) – cgew85

+1

gracias. actualizado el enlace. –