[JAVA] J'ai eu un IllegalAccessError en essayant d'utiliser PowerMock avec JUnit

introduction

Dans le test JUnit, j'ai essayé d'installer PowerMock parce que je voulais l'utiliser, mais une erreur s'est produite, je vais donc résumer la solution.

Symptômes

//Test Foo
public class FooTest {
	@Test
    public void testFoo() {
        //Créer une maquette
        Bar bar = mock(Bar.class);
        
        //Divers tests
    }
}

J'ai écrit un code de test comme celui-ci avant d'installer PowerMock, et cela a bien fonctionné.

Lorsque j'ai ajouté PowerMock à pom.xml, j'ai eu l'erreur suivante lors de l'exécution du test.

java.lang.IllegalAccessError: class org.mockito.internal.creation.jmock.ClassImposterizer$1 cannot access its superclass org.mockito.internal.creation.cglib.MockitoNamingPolicy

Dans pom.xml, la partie qui semble être liée est comme ça.

<dependencies>
  <!-- Spring Boot Starter Test -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
  <!-- Powermock -->
  <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.5.4</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.5.4</version>
    <scope>test</scope>
  </dependency>
  <!--Autres bibliothèques externes-->
</dependencies>

une analyse

Lorsque j'ai essayé Google, ces questions et réponses ont été utiles.

stackoverflow - Junit Mockito error on initialization

Selon cela, spring-boot-starter-test 1.4.2.RELEASE utilise Mockito 1.10.19 par défaut, et ʻorg.mockito.internal.creation.jmock.ClassImposterizer sur 1.10.19. Il semble que «n'est pas inclus.

Dans mon environnement, j'ai utilisé spring-boot-starter-test 1.5.14.RELEASE, et quand j'ai vérifié la dépendance Maven, j'ai trouvé qu'il utilise également Mockito 1.10.19. J'ai fait.

Il semble que la version 1.9.5 contienne ʻorg.mockito.internal.creation.jmock.ClassImposterizer`.

Solution

Modifiez pom.xml comme suit.

<dependencies>
  <!-- Spring Boot Starter Test -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <!--Exclure Mockito-->
    <exclusions>
      <exclusion>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <!--Ajout de Mockito-->
  <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
  </dependency>
  <!-- Powermock -->
  <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.5.4</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.5.4</version>
    <scope>test</scope>
  </dependency>
  <!--Autres bibliothèques externes-->
</dependencies>

Maintenant, l'erreur a disparu.

à la fin

Il était utile d'avoir des questions et réponses faciles à comprendre.

Recommended Posts

J'ai eu un IllegalAccessError en essayant d'utiliser PowerMock avec JUnit
J'ai une exception InvalidUseOfMatchersException lors de l'utilisation de l'un dans le simulateur de JUnit
Quand je bcrypt avec node + docker, j'ai une erreur
J'ai eu une erreur en essayant d'installer sbt pour créer un environnement de développement Scala
Une note gênante lorsque vous essayez d'utiliser nginx avec des conteneurs distants de vscode
J'étais accro à WSl en essayant de créer un environnement de développement d'applications Android avec Vue.js
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Quand j'ai essayé de créer un environnement pour PHP7.4 + Apache + MySQL avec Docker, je suis resté bloqué [Windows & Mac]
Je veux utiliser java8 forEach avec index
[Résolution d'erreur] Se produit lors de la tentative de création d'un environnement pour le printemps avec docker
Résumé en essayant d'utiliser Solr en Java et en obtenant une erreur (Solr 6.x)
Lors de l'enregistrement d'un nouvel utilisateur, j'ai eu une erreur appelée ActiveRecord :: NotNullViolation et comment y faire face.
Un avertissement s'affiche lorsque vous essayez d'utiliser un entier énorme avec les variables spéciales $ 1, $ 2, $ 3 ...
Webdrivers :: BrowserNotFound: Impossible de trouver le binaire Chrome. Lorsque j'ai essayé pour la première fois de tester E2E avec Docker + Rails, je suis resté coincé dans une erreur.
J'ai eu une erreur lors de l'utilisation de nextInt, nextLine et substring.
Je veux pousser une application créée avec Rails 6 vers GitHub
Comment spécifier la base de données lors de la création d'une application avec des rails
Qu'advient-il des variables d'instance lors de la copie d'une instance avec ruby
Je souhaite envoyer manuellement un e-mail d'autorisation avec Devise
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
Comment utiliser JUnit (débutant)
[Création] Comment utiliser JUnit
Quand j'ai essayé d'utiliser le kit AWS SDK avec Ruby + Lambda, `sam local` était en panne.
Quand j'ai essayé de composer une mise à jour dans le conteneur Docker, je me suis fâché avec proc_open (): fork a échoué
Quand je pousse vers Heroku, je suis en colère contre l'échec de la précompilation des actifs.
J'ai essayé de créer un environnement de développement http2 avec Eclipse + Tomcat
Ce à quoi j'étais accro lors de la mise en œuvre de l'authentification Google avec des rails
J'ai essayé de créer une application Android avec MVC maintenant (Java)
[Rails] Je souhaite ajouter des données aux paramètres lors de la transition avec link_to
Résolution d'une erreur survenue lors de la tentative d'utilisation de Spark dans un environnement où Java 8 et Java 11 coexistent
J'ai essayé d'interagir avec Java
Comment utiliser mssql-tools avec Alpine
Lorsque j'ai exécuté un pot créé à l'aide de WildFly Swarm, j'ai obtenu une InvocationTargetException.
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
J'ai essayé de faire une sauvegarde automatique avec plus agréable + PostgreSQL + SSL + docker
Rubocop se met en colère quand j'essaye de remplir zéro (remplir 0) avec Ruby
01. J'ai essayé de créer un environnement avec SpringBoot + IntelliJ + MySQL (MyBatis) (Windows 10)
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
Je veux ForEach un tableau avec une expression Lambda en Java
Lorsque j'essaye de m'inscrire avec devise, il redirige automatiquement vers root_path
Comme la commande du utilisée lorsque la capacité est pleine est difficile à utiliser, j'ai essayé de l'envelopper avec du rubis
J'ai construit un environnement CentOS 8 avec Vagrant et essayé de sync_folder, mais j'ai eu une erreur, donc je l'ai résolue.
La tentative d'utilisation de docker avec jetson jetpack4.3 échoue (docker: réponse d'erreur du démon: échec de la création de l'exécution OCI: container_linux.go: 345: démarrage du processus de conteneur causé ...)