Итак, с игрой вы можете легко написать интеграционные тесты, используя экземпляр FakeApplication. См. Раздел https://www.playframework.com/documentation/2.2.x/JavaTest.
Также вы можете настроить пользовательский экземпляр Evolution, который будет использоваться в вашем тесте.
Вот простой пример, в Java:
@Before
public void setUp() throws IOException {
fakeapp = Helpers.fakeApplication(testconfiguration)
evolutions = Evolutions.applicationEvolutions(fakeapp.getWrappedApplication().path(), fakeapp.getWrappedApplication().classloader(), "database");
Iterator<Evolution> iterator = evolutions.iterator();
while (iterator.hasNext()) {
Evolution current = iterator.next();
if (latestEvolution == null) {
latestEvolution = current;
} else {
latestEvolution = current.revision() > latestEvolution.revision() ? current : latestEvolution;
}
}
latestEvolutionFile = new File(fakeapp.getWrappedApplication().path(), "path/to/evolution/files" + latestEvolution.revision() + ".sql");
latestEvolutionFileContent = Files.readAllBytes(Paths.get(latestEvolutionFile.getAbsolutePath()));
}
@Test
public void testLatestDownEvolution() throws IOException {
try {
// arrange
// modify the latest evolution file, so when executing the evolution plugin a 2nd time the latest evolution file will be applied again
Evolutions.updateEvolutionScript("database", latestEvolution.revision(), "", "", "", fakeapp.getWrappedApplication());
// act
app.getWrappedApplication().plugin(EvolutionsPlugin.class).get().onStart();
// when no exception has been thrown, then we are fine
} catch (InconsistentDatabase ex) {
Assert.fail(ex.subTitle() + " " + ex.rev() + ".sql");
} finally {
// just bring the modified script back to his original content, cause we don't want to commit that in our VCS...
try (FileOutputStream stream = new FileOutputStream(latestEvolutionFile)) {
stream.write(latestEvolutionFileContent);
}
}
После запуска эволюций тестирования можно писать тесты с помощью простых запросов ebean, чтобы проверить густонаселенные значения.
Спасибо за этот ответ, который частично решает мою проблему. Решение, однако, касается только тестирования, если эволюция вверх и вниз выполняется без ошибок. Поскольку fakeApplication с inMemoryDatabase всегда пуст, а затем применяет эволюции, которые мы не можем создать до/после тестовых случаев, которые проверяют, выполняются ли инструкции обновления и т. Д. Есть ли способ установить базу данных на определенную эволюционную ревизию, заполнить таблицу и затем запустить последующие эволюции? – plade