Pergunta

Não estou sendo capaz de executar o PowerMock através do Maven. Eu sou o Powermock Mockito e o PowerMockRunner para dirigir um teste de Junit.

Aqui está o teste:

@RunWith(PowerMockRunner.class)
@PrepareForTest( { UserLocalServiceUtil.class, ExpandoBridge.class })
public class AlertNotificationsTest {
//...

Não configurei nada especial para executar o teste. Meu POM faz referência aos seguintes depósitos:

  • org.mockito | Mockito-All | 1.8.0
  • Junit | Junit | 4.6.0
  • org.powermock.modules | PowerMock-Module-Junit4 | 1.3.1
  • org.powermock.api | Powermock-api-mockito | 1.3.1

Quando eu corro mvn -Dtest=AlertNotificationsTest test A MVN diz que não há teste para executar. Mas se eu executar a mesma classe de teste do Eclipse, tudo corre bem.

Estou fazendo algo errado?


Aqui está o meu pom.xml abaixo (as partes relevantes)

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>5.9</version>
        <classifier>jdk15</classifier>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.6</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.8.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock.modules</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.3.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock.api</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>1.3.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Aqui está a saída do maven

MVN -DTEST = AlertNotificationstest Test

...
[INFO] Surefire report directory: C:\Devel\Java\EP_PORTAL\information-provider\target\surefi

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.313 sec

Results :

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

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] No tests were executed!  (Set -DfailIfNoTests=false to ignore this error.)
[INFO] ------------------------------------------------------------------------

Observação: Eu posso executar outros testes, simplesmente não consigo executar este teste. Se eu fizer o AlertNotificationsTest Classe estende junit.framework.TestCase A aula é apanhada pelo Maven, mas parece que não é motivada por PowerMockRunner.

Aqui está a saída disso:


Running TestSuite
[ERROR]: No test suite found.  Nothing to run
Tests run: 4, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 1.053 sec <<< FAILURE!

Results :

Failed tests:
  testSingleEventNotification(pt.estradasportugal.traffic.services.events.AlertNotificationsTest)
  testTwoEventNotification(pt.estradasportugal.traffic.services.events.AlertNotificationsTest)

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

Novamente, esses testes funcionam bem com o Eclipse.


Atualizar Encontrei um possível problema e solução alternativa. Eu tenho testes com testng e junit. Se eu remover o teste do meu POM e migrar todos os meus testes para o Junit, sou capaz de executar meu teste de PowerMock com mvn test. Parece que há um problema com o Maven e o Junit/Testng Combo.

Eu gostaria de poder correr os dois, mas se não encontrar um caminho, vou responder minha própria pergunta. Obrigado caras e garotas

Foi útil?

Solução 7

Houve um problema ao misturar testes de teste e Junit. Migrar todos os testes para Junit resolveu meu problema. Obrigado rapazes.

Outras dicas

Acabei de ter esse erro e trabalhei com a solução. Meu arquivo pom.xml tinha a seguinte dependência:

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-mockito-release-full</artifactId>
  <version>1.5</version>
  <classifier>full</classifier>
  <scope>test</scope>
</dependency>

O problema vem do fato de que meu código usa o JUNIT e a dependência acima tem uma dependência externa do teste. Isso estava impedindo que meu teste seja executado. Por que eu não sei - você teria uma estrutura de teste teria sido testado um pouco melhor !!!

De qualquer forma, a solução foi dividir as dependências 'completas' para apenas as necessárias:

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-api-mockito</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-core</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-module-junit4</artifactId>
  <version>1.5</version>
  <scope>test</scope>
</dependency>

Isso resolveu. Btw eu usei mvn dependency:tree para entender as dependências associadas.

Não posso reproduzir seu problema. Com o seguinte conteúdo no meu pom.xml:

  <repositories>
    <repository>
      <id>powermock-repo</id>
      <url>http://powermock.googlecode.com/svn/repo/</url>
    </repository>
  </repositories>
  <properties>
    <powermock.version>1.3.1</powermock.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.powermock.modules</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.powermock.api</groupId>
      <artifactId>powermock-api-mockito</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <version>1.8.0</version>
    </dependency>
  </dependencies>

E a aula de teste a seguir (pulando as importações):

@RunWith(PowerMockRunner.class)
@PrepareForTest( { App.class })
public class AppTest {
    @Test
    public void testApp() {
        assertTrue(true);
    }
}

Corrida mvn test -Dtest=AppTest Apenas funciona bem e me dê a seguinte saída:

...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.135 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Wed Nov 25 17:34:32 CET 2009
[INFO] Final Memory: 9M/79M
[INFO] ------------------------------------------------------------------------

Portanto, a pergunta é: você tem um método anotado com @Test dentro AlertNotificationsTest?

Também me deparei com essa edição, mas não é uma questão do Powermock. Minha aula de teste foi nomeada xstatictests.java.

Quando eu executo "MVN Limpe Test", esse teste não funcionaria, ele só funcionou quando eu especifiquei o teste usando "-dtest = ..."

A documentação Surefire menciona que, por padrão, apenas esses padrões são pesquisados: "/Test*.java " - Inclui todos os seus subdiretos e todos os nomes de arquivos Java que começam com" teste "./Test.java " - inclui todos os seus subdiretos e todos os nomes de arquivos Java que terminam com" teste ".*/*Testcase.java " - Inclui todos os seus subdiretos e todos os nomes de arquivos Java que terminam com" Testcase ".

Portanto, alterar o nome da classe para um que termina com um deles será executado quando o "teste MVN" for chamado, caso contrário, o plug -in SureFire precisa ser configurado com o nome da classe especificamente.

A configuração do PowerMock parece boa para mim, e os frascos parecem bem (assumindo

O Eclipse pode estar usando sua própria biblioteca Junit "interna", portanto, os diferentes comportamentos?

O teste está anotado com org.junit.@Teste?

Se você olhar para a fonte do plug -in Surefire, ele fará algumas coisas sorrateiras. Se encontrar algum pacotes de teste no carregador de classe, optará por executar um testng testRunner. Ainda não vi nenhum exemplo dos testes JUNIT e TESTNG, executando bem lado a lado.

Eu tive o mesmo problema, e demorei um pouco para descobrir. Minha configuração estava puxando uma versão mais antiga do Jboss.javassist, que estranhamente impedia que o PowerMockrunner trabalhasse.

Vale a pena notar que eu também tenho um ambiente misto de Junit / Testng. Anteriormente, tentei a solução de adicionar vários fornecedores de sufire e isso também não funcionou (usando o Surefire 2.14.1). Depois de atualizar para o Serrefire 2.17, meus testes JUNIT e TESTNG começaram a funcionar sem a necessidade de declarar provedores infalíveis.

Aqui está a minha seção de plug -in ...

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <groups>spring, unit, integration</groups>
                <systemPropertyVariables>
                    <java.awt.headless>true</java.awt.headless>
                    <org.apache.activemq.default.directory.prefix>target/test/</org.apache.activemq.default.directory.prefix>
                    <log4j.configuration>file:${project.basedir}/src/test/resources/log4j.properties</log4j.configuration>
                </systemPropertyVariables>
                <argLine>${surefire.args}</argLine>
            </configuration>
        </plugin>

... e o teste relevante deps ...

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
        <scope>test</scope>
    </dependency>
    <!--
    PowerMock versions are compatible with specific Mockito versions.
    https://code.google.com/p/powermock/wiki/MockitoUsage13
     -->
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.5.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>1.5.4</version>
        <scope>test</scope>
    </dependency>
    <!-- without this PowerMock tests don't run in maven -->
    <dependency>
        <groupId>jboss</groupId>
        <artifactId>javassist</artifactId>
        <version>3.8.0.GA</version>
        <scope>test</scope>
    </dependency>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top