2016-03-18 1 views
2

J'utilise le framework de jeu 2.4 avec les modèles de données et les évolutions d'ebean. En ce moment j'essaye d'écrire le premier test pour mes modèles en utilisant une base de données de test mysql. Je veux avoir une base de données de test propre avant de commencer mes tests.Cadre de jeu: Comment appliquer l'évolution d'une base de données à une base de données de tests d'applikation fictive

Jusqu'à présent, j'essayé ceci:

public class ModelUnitTest { 

    public static FakeApplication app; 

    @BeforeClass 
    public static void startApp() { 
     // Load test config with testserver 
     Map<String, String> settings = new HashMap<String, String>(); 
     settings.put("db.default.driver", "com.mysql.jdbc.Driver"); 
     settings.put("db.default.url", "jdbc:mysql://127.0.0.1:3306/sopra-ws1516-team10-test?autoReconnect=true&useSSL=false"); 
     settings.put("db.default.username", "root"); 
     settings.put("db.default.password", "root"); 
     settings.put("play.evolutions.autoApply", "true"); 
     settings.put("ebean.default", "models.ebean.*"); 
     app = play.test.Helpers.fakeApplication(settings); 

     Evolutions.applyEvolutions(XXXXXX); 

     Helpers.start(app); 
    } 



    @Test 
    public void testCreateUser() { 
     try { 
      User testUser = User.createUser("Max", "Musterman", "01.01.1980", "[email protected]", "1234"); 
      assertNotNull(testUser); 
     } catch (Exception e) { 
      assertNull(e); 
     } 
    } 


    @AfterClass 
    public static void stopApp() { 
     Evolutions.cleanupEvolutions(XXXXXX); 
     Helpers.stop(app); 
    } 

} 

Sans les évolutions ça marche, mais le problème est que je ne peux pas être sûr d'avoir une base de données vide quand je commence mes tests. Ma solution serait d'appliquer des évolutions avant et des évolutions propres après mes tests. Cela me donnerait un environnement propre pour mes tests.

Mais il n'est pas possible d'utiliser la classe Evolutions sans avoir un objet Database et il semble qu'il n'y ait aucun moyen de créer un objet de base de données en utilisant les connexions DB que ma FakeApplication a créées.

Est-ce que quelqu'un a une solution à ce problème?

+0

Unlikeley que j'ai trouvé des solutions pour cela, mais je vais inspecter mon ancien code. –

Répondre

0

Je suis autour de lui en appelant manuellement l'injecteur:

private static Database db; 

@BeforeClass 
public static void startApp() { 
    ... 
    app = play.test.Helpers.fakeApplication(settings); 

    db = app.injector().instanceOf(Database.class); 
    Evolutions.applyEvolutions(db); 

    Helpers.start(app); 
} 

@AfterClass 
public static void stopApp() { 
    Evolutions.cleanupEvolutions(db); 
    Helpers.stop(app); 
}