2012-08-28 17 views
9

Inicialmente estaba usando solamente Mockito en junits así que estaba usando SpringJUnit4ClassRunner.class en @RunWith anotación es decirproblemas durante el uso de @RunWith anotación y powerMock

@RunWith(SpringJUnit4ClassRunner.class) 

debido a lo cual la inyección de dependencia de primavera estaba trabajando bien y fue conseguir un bean a través de

@Autowired 

Someservice someservice ; 

Pero ahora, también he integrado PowerMock en él.

clase Así como por doc, he sustituido mencionado en @RunWith anotación con

@RunWith(PowerMockRunner.class) 

pero ahora, someservice está llegando a ser nulo. ¿Hay una manera de utilizar tanto SpringJUnit4ClassRunner.class y PowerMockRunner.class en @RunWith anotación

Respuesta

13

Tienes que utilizar el PowerMockRule.

@RunWith(SpringJUnit4ClassRunner.class) 
@PrepareForTest(X.class) 
public class MyTest { 
    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    // Tests goes here 
    ... 
} 

Para un ejemplo completo de la Pruebas de Integración de primavera con PowerMock y Mockito, Podría obtener este maven project.

svn co http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ 
cd spring-mockito/ 

Mire las dependencias de la powermock.

less pom.xml 

y vuelva a ejecutar la prueba

mvn test 

y usted debe obtener los siguientes resultados de la prueba:

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0 
+0

Hola gontard, he intentado con tu solución, pero cuando estaba ejecutando mi junit recibí una excepción que decía que la "regla" de PowerMockRule debía ser pública, así que la hice pública y ahora obtengo la javassist.NotFoundException. ¿Alguna idea? excepcion java.lang.RuntimeException: javassist.NotFoundException: $ Proxy88 \t en org.powermock.core.classloader.MockClassLoader.loadUnmockedClass (MockClassLoader.java:187) \t en org.powermock.core.classloader.MockClassLoader.loadModifiedClass (MockClassLoader .java: 147) .... – Bhuvan

+0

@bhuvan no lo sé, tal vez sea [este tema] (http://code.google.com/p/powermock/issues/detail?id=350). Completo mi respuesta también. – gontard

+0

@gontard http://powermock.googlecode.com/svn/tags/powermock-1.4.12/examples/spring-mockito/ - este enlace ya no funciona. –

0
@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = "classpath:/test-servlet.xml") 
    public class ControlCenterManagerImplTest { 

    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    //Powermock agent initialization not required and using maven dependency specified below we can execute Power mock using spring.} 

<!-- Required for PowerMock --> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>1.5</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- Required for PowerMockRule --> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4-rule-agent</artifactId> 
     <version>1.5</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
    </dependency> 
9

Sé que este hilo es viejo, pero es bueno para agregar que desde 2014 y este pull request, puede usar la anotación @PowerMockRunnerDelegate para "delegar" el contexto de ejecución en SpringJUnit4ClassRunner (o cualquier otro corredor realmente).

Por encima de código se vería así:

@RunWith(PowerMockRunner.class) 
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) 
@PrepareForTest(X.class); 
public class MyTest { 

    // Tests goes here 
    ... 
} 

Con esta anotación, no es necesario la regla PowerMock más!

Cuestiones relacionadas