Ошибка базы данных тестового примера Play Framework Junit

Я новичок в игре framework и Junit. Иметь немного знаний в java. Основываясь на начале работы с игровым фреймворком и документации, я начал писать модульные тесты для игрового приложения. Когда я запускаю приложение в обычном режиме. Он отлично работает с моделями баз данных.

когда я запускаю приложение в тестовом режиме. показывает исключение запроса jpa и схема не найдена.

Прилагаю файл тестового класса для справки: -

import org.junit.*;
import java.net.*;
import java.util.*;
import play.test.*;
import play.test.FunctionalTest.URL;
import models.*;
import params.*;

public class BasicTest extends UnitTest {



    @Test
    public void testing(){

        //User user = null;
        User user = User.find("byUsernameAndPassword","admin","Y29tcGFzczEyMw==").first();
        assertNotNull(user);
        //assertNotNull("test");
    }

}

Кто-нибудь поможет мне решить эту проблему.

Это мои текущие настройки application.conf в игре:

db.url=jdbc:vertica://verticadatabaseurlurl/XXXXXXX
db.driver=com.vertica.Driver
db.user=XXXXX
db.pass=XXXXXX
db.schema=XXXXXX

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
 jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
 jpa.ddl=none
#
# Debug SQL statements (logged using DEBUG level):
 jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.db=mem
%test.jpa.ddl=create
%test.mail.smtp=mock

в настоящее время я использую vertica для базы данных. Благодаря этим настройкам приложение может запускаться в обычном режиме. В тестовом режиме это делает эту проблему.

http://tinypic.com/r/a48zg4/7 — ссылка на скриншот


person Mohan Shanmugam    schedule 24.10.2011    source источник


Ответы (1)


Какую конфигурацию JPA вы используете для модульных тестов. Более конкретно, какой файл persistence.xml вы используете для модульных тестов. Возможно, вам нужно добавить параметр конфигурации автогенерации схемы в используемую тестовую единицу персистентности, например:

<persistence-unit name="emApplicationManaged_forTests_h2" transaction-type="RESOURCE_LOCAL">  
    <class>model.Employee</class>  
    <!-- your Entity classes here --> 
    <properties>  
        <!-- your hibernate specific params here -->
        <!-- the below parameter tells hibernate to create the schema when you start your app (test) and to erase it when it finishes: -->
        <property name="hibernate.hbm2ddl.auto" value="create-drop" />    
    </properties>  
</persistence-unit>

Вышеуказанное относится к случаям, когда вы используете реализацию Hibernate JPA. Если вы используете Toplink, попробуйте:

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="todos" transaction-type="RESOURCE_LOCAL">
        <!-- entity classes -->
        <properties>
            <!-- eclipselink specific config-->
            <!-- EclipseLink should create the database schema automatically -->
            <property name="eclipselink.ddl-generation" value="create-tables" />
            <property name="eclipselink.ddl-generation.output-mode" value="database" />
        </properties>
    </persistence-unit>
</persistence>

Для платформы Play у вас есть специальные параметры конфигурации, которые начинаются с test. префикс. Попробуйте следующее: откройте файл конфигурации application.conf и добавьте строки, которые настраивают тестовую среду для автоматического создания схемы БД:

%test.db=mem
%test.jpa.ddl=create-drop

Затем попробуйте свои тесты на странице выполнения модульного теста Play (localhost:9090/@tests#)

Также ознакомьтесь с этой шпаргалкой Play, она довольно полезна (я думаю, что глава под названием «Multidev Environment» имеет отношение к вашей конкретной проблеме):

http://playcheatsheet.appspot.com/show/ArtemMedeu/armed/play-cheatsheets

person Shivan Dragon    schedule 24.10.2011
comment
Можете ли вы объяснить это для игровой структуры. я использую игровой фреймворк - person Mohan Shanmugam; 24.10.2011
comment
Посмотрите мой ответ, я добавил пример для Play - person Shivan Dragon; 24.10.2011
comment
такая же проблема после изменений в application.conf. Изменен вопрос, чтобы показать текущие настройки application.conf для справки. - person Mohan Shanmugam; 25.10.2011
comment
Ну, очевидно, все еще есть проблема либо с SQL-запросом, сгенерированным из вашего кода, либо с тем, как схема создается в db. Я вижу, у вас уже есть jpa.debugSQL=true в вашем файле .conf. Выполните свой модульный тест, посмотрите на сгенерированный SQL, затем посмотрите в базе данных и посмотрите, относится ли этот сгенерированный SQL к тому, что находится в базе данных (возможно, используйте реальную базу данных, такую ​​​​как MYSql, вместо в памяти, чтобы вы могли фактически получить доступ его с помощью консоли/инструмента с графическим интерфейсом и изучите его). Проверьте, не ссылается ли запрос на таблицы, которые на самом деле не существуют в базе данных, или на столбцы в той же ситуации. - person Shivan Dragon; 25.10.2011
comment
Спасибо за быстрое обновление. для справки прилагаю снимок экрана для справки. - person Mohan Shanmugam; 25.10.2011
comment
возможно, используйте настоящую базу данных, такую ​​​​как MYSql, вместо базы данных в памяти - для этого мне нужно изменить test.db.url на наш путь к базе данных vertica - person Mohan Shanmugam; 25.10.2011
comment
Кроме того, вы установили для своего test.jpa.ddl значение create-drop? (test.jpa.ddl=создать-сбросить)? В вашем примере кода я все еще вижу, что он настроен на создание, и я думаю, что это допустимое значение (для Hibernate это должно быть создание-удаление). - person Shivan Dragon; 25.10.2011
comment
какая польза от этого утверждения - test.jpa.ddl=create-drop. Влияет ли это на какие-либо табличные значения. хочу знать, где я могу получить информацию о значениях файла application.conf - person Mohan Shanmugam; 25.10.2011
comment
Обычно я бы указал вам на документацию по фреймворку Play: playframework.org /documentation/1.2.3/configuration#jpa.ddl, но там не так много подробностей. Во всяком случае, я почти уверен, что допустимыми значениями для test.jpa.ddl являются: create-drop,update,validate и empty (без значения, как в test.jpa.ddl=). Подробности о том, что они делают, вы можете найти здесь: stackoverflow.com/questions/438146/ - person Shivan Dragon; 25.10.2011
comment
Наконец-то я настроил базу данных с помощью vertica и успешно запустил модульный тест. Спасибо за вашу хорошую поддержку - person Mohan Shanmugam; 28.10.2011