11
votes

PowerMock, Mockito NullPointerException lorsque vous appelez Super () JDialog

Je reçois une nullpointerException lorsque j'essaie de tester des méthodes dans un objet JDialog. Je dois initialiser une simulation de la version du parent de la boîte de dialogue ainsi qu'une autre classe qui sera utilisée (en plus d'appeler une méthode statique. Le code est comme suit:

void addOwnedWindow(WeakReference weakWindow) {
  if (weakWindow != null) {
    synchronized(ownedWindowList) {  ***<<------ offending line***
      // this if statement should really be an assert, but we don't
      // have asserts...
      if (!ownedWindowList.contains(weakWindow)) {
        ownedWindowList.addElement(weakWindow);
      }
    }
  }
}


5 commentaires

Avez-vous déjà eu ce travail? Si oui, cela vous dérangerait-il de poster la solution?


Starnge Vous obtenez NULL POINTER AT SYNCHRONISÉ (propriétéWindowlist) . Si vous vérifiez propriétairewindows membre de données dans la fenêtre.java, il a été instancié et jamais affecté à NULL à nouveau. Vous vous demandez ce qui pourrait éventuellement faire ce membre de données null. Pouvez-vous vérifier votre code si cet élément de données est accédé (à l'aide de la réflexion) et a été modifié en null. Son cas le moins possible que ce membre de données doit être modifié manuellement mais mieux pour s'assurer.


@glenneroo, je pense que mettre une prime ici au lieu de créer une nouvelle question avec votre propre code était une erreur. Pourriez-vous fournir quelques détails tels que ce que vous faites et empilez la trace d'exception que vous obtenez.


@Serggr, vous avez probablement raison, ma configuration est légèrement différente (pas de PowerMockRunner) mais autrement la même exception et lieu. La trace de la pile ne semble pas très utile, mais je créerai une autre question et j'espère qu'il ne s'agit pas d'une duplication.


@glenneroo, en fait, il pourrait être utile d'ajouter un lien à cette question et de mentionner que vous n'avez toujours aucune solution pour votre problème.


3 Réponses :


5
votes

a l'air délicat! Essentiellement, vous allez devoir trouver toutes les méthodes qui sont appelées sur Controlframe dans le cadre du constructeur, puis saupoudrent quelques appels vers xxx

si Cela ressemble à une corvée difficile, que diriez-vous d'essayer de créer une implémentation par défaut de icontrolframe que vous créez dans votre configuration de test () et à l'aide de cette institute d'une simule.

J'ai eu un problème similaire il y a un moment où j'essayais d'assister à un auditeur Spring JMS. À tort ou à tort, j'ai eu une solution de travail en créant ma propre implémentation par défaut de defaultMessagelisenContainer qui me donnait des problèmes similaires à ce que vous décrivez. Ma solution consistait à étendre la mise en œuvre réelle avec ma propre version spécifique à tester qui ressemblait à ce xxx

dans mon exemple, j'ai pu obtenir mes tests en passant au dos d'un NULL Valeur de la méthode Problème CreateConnection (). Peut-être que la même approche peut vous aider.


0 commentaires

0
votes

Le propriétaireWindowlist est transitoire dans le java.awt.window classe. Votre instance du JDialog est-elle sérialisée? Si tel est le cas, vous devrez peut-être utiliser la méthode lisechabject (java.io.oObjectstream) à partir de l'interface Serializable pour réinitialiser le propriétairewinwindows


0 commentaires

0
votes

Je ne sais pas à quoi ressemble votre icontrolframe, mais en passant un cadre moqueur sur super () ne fonctionne pas. J'ai dû instancier ma propre version: xxx

puis dans votre configuration (): xxx


0 commentaires