-2
votes

Powermockito.MockStaticstatic () mais toujours à obtenir NPE lorsque la méthode statique est appelée

Remarque - J'ai marqué 3 Ligne Numéros que je discute de ma question, vous devrez peut-être faire défiler vers la droite dans les extraits de code à voir.

Je suis vraiment en difficulté Test d'une méthode avec en option.map () s. xxx

extrayeurreference () renvoie un Facultatif de type obj et est une méthode privée.

et mon test: xxx

AT Ligne n ° 1 , comme indiqué dans mon accepter () méthode, objet t a été traité et a eu son transactatus avec succès. Cependant, à ligne n ° 2 Je reçois une NPE lors de l'exécution du test ci-dessus.

J'ai aussi essayé PowerMockito.spy (statiqueconverter.class); au lieu de powermockito.mockstatique (staticconverter.class); selon https://github.com/powermock/powermock/wiki/mockito#mocking-static-method Mais je reçois le même NPE.

Ma carte Conversion t à StatusDataObj type. Donc, lorsque la carte appelle la carte convert , je bout et retourner mon type. Cependant, à l'origine, je m'attendais à ce que ligne n ° 3 prendrait en charge efficacement la carte appels sur le facultatif retourné de extrayantReference ( ) , puisque j'utilise un objet réel avec des valeurs définies, mais il doit y avoir une valeur null quelque part ailleurs?


7 commentaires

Votre code pourrait-il être présenté comme un exemple minimal, complet et vérifiable , s'il vous plaît? Lorsque j'essaie de le lire, je pense qu'il y a beaucoup d'inconnues.


Est-ce que obj implémente est égal à (et hashcode ) correctement? Sinon, je soupçonne que cela pourrait avoir une meilleure chance de travailler si vous stockez getobj () dans une variable et utilisez-le dans les deux endroits.


@Andyturner Bon crier mais malheureusement le même résultat. J'ai mis à jour les extraits pour refléter le changement.


@ Olev.v. J'ai supprimé des appels de méthode et remplacés par des types de retour pour simplifier.


Pouvez-vous montrer comment vous annotant la classe de test?


@Maciejkowalski mis à jour. J'ai inclus @preparfortest ({classbeingtestheest.class, staticconverter.class}) dans mon code, si c'est ce que vous êtes après :)


Essayez de remplacer la référence de la méthode staticconverter :: Convertir avec un appel explicite en Lambda à la méthode actuelle: E -> statiqueconverter.convert (E) .


3 Réponses :


0
votes

Vous devez ajouter les classes au @preparfortest code> avec lequel vous travaillerez dans ce test:

@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticConverter.class, ClassBeingTested.class)


5 commentaires

Celles-ci sont incluses, j'ai mis à jour mon exemple de code. Obtenir le même NPE


Êtes-vous sûr que la première carte ne se transforme pas en option? Également sipresent fait partie d'une inerface en option, pas de flux. De plus, ce flux n'a aucune opération terminale, comment cela compilait-il / coureur?


La première carte se transforme en un en option .


est staticconverter.convert surchargé?


Nope, il n'y a qu'une seule méthode dans la classe Staticconverter , et elle s'appelle convert .



1
votes

Essayez de remplacer la référence de méthode statiqueconverter :: Convertir avec un appel de Lambda explicite à la méthode actuelle: E -> statiqueconverter.convert (E) . .

J'ai eu des problèmes avec des références de méthodes moqueuses PowerMock, mais en l'laissant comme une méthode explicite, je pourrais réussir à se moquer de ces appels.


0 commentaires

0
votes

persist était null. Je ne sais pas pourquoi la NPE était à Line 2 .


0 commentaires