2013-03-20 5 views
2

Je suis un test unitaire d'une application basée sur Play Framework. Comme je l'ai lu dans la documentation, pour le bien de compensation de l'Etat, avant chaque test, je recharger la liste des lieux comme celui-ci:NullPointerException lors de la réexécution d'un test

@Before 
    public void setUp() { 
     Fixtures.deleteAll(); 
     Fixtures.load("data.yml"); 
     Logger.info("FIXTURES RELOADED"); 
    } 

Puis je vais à la plate-forme de test Web.based (http://localhost:9000/@tests), choisissez un test traite avec l'extraction de certaines données (User u = User.findById(1l);), puis affirmer contre les données. Ça marche.

Cependant, si je tente de sélectionner à nouveau le test et exécutez à nouveau, il échoue avec:

A java.lang.NullPointerException has been caught, Try to read name on null object models.User 

Si je me arrête complètement l'application et le redémarrer, il fonctionne à nouveau (la première fois), mais commencer et s'arrêter prend un peu de temps et est assez fastidieux, si vous le faites 10 fois par minute.

J'utilise Jouer 1.2.5

+0

Est-ce que setup() est appelé pendant chaque exécution? –

+0

Où insérez-vous votre objet utilisateur dans la base de données? – BobTheBuilder

+0

essayez '@ BeforeMethod' - au lieu de' @ Before'. – SudoRahul

Répondre

1

Le problème est facile à utiliser auto-incrémentée ID (sur chaque insert) tout en essayant d'obtenir utilisateur ID 1 sur tous les tests.

Vous pouvez obtenir l'ID utilisateur nouvellement créé et l'utiliser dans votre test ou trouver un utilisateur par un autre champ que vous connaissez certainement.

+0

Bon point! Je vais essayer maintenant – preslavrachev

+0

C'était exactement le problème. Donc, dans mes tests, j'éviterai d'avoir un utilisateur avec findById, mais plutôt avec quelque chose que je suis sûr ne changera pas, comme User.find ("byUsername", "testuser1") – preslavrachev

+0

Content de pouvoir aider! vous pouvez upvote si vous le souhaitez :) – BobTheBuilder

Questions connexes