Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / h2 database как база для создания тестов / 15 сообщений из 15, страница 1 из 1
27.02.2015, 11:08
    #38890329
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Добрый день !

Есть идея : использовать h2 database как базу для тестирования pl sql процедур .

конкретно - есть куча процедур - с кучей бизнес логики под oracle и mysql их нужно как то тестировать .

Вижу такой путь пишется приложение с кучей junit тестов .

Тест представляет из себя :

создание базы в памяти , загрузку требуемых скприптов для создания таблиц и загрузку в базу процедур .

вопрос : поддерживает ли h2 database хранимые процедуры в стиле Mysql/ oracle ?

как их туда грузить ?


в примерах только код на java ?!

http://h2database.googlecode.com/svn/trunk/h2/src/test/org/h2/samples/Function.java


сами тесты .

Псевдокод такой :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.h2.tools.RunScript;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class KeyTest {

    private static Connection conn;

    @BeforeClass
    public static void setUpClass() throws ClassNotFoundException, SQLException {
        Class.forName("org.h2.Driver");
        conn = DriverManager.getConnection("jdbc:h2:mem:db_test;MODE=MYSQL");
       // тут создание базы и загрузка всех процедур , инициализация данными 
       // создание Snapshot  базы для быстрого восстановления перед каждым тестом 
    }

    @AfterClass
    public static void tearDownClass() {
    }

    @Before
    public void setUp() throws SQLException, IOException {
   // тут берем Snapshot и восстанавливаем начальное состояние 
    }

    @After
    public void tearDown() {
    }

    @Test
    public void load() throws SQLException, IOException {
   // потом перенести все это в setUpClass
        

        Path path = FileSystems.getDefault().getPath("~/resources/db_test/");

        Files.list(path).forEachOrdered((Path x) -> {
            try {
                RunScript.execute(conn, new FileReader(x.toFile()));
            } catch (SQLException | FileNotFoundException ex) {
                Logger.getLogger(TrnKeyTest.class.getName()).log(Level.SEVERE, null, ex);
            }
        });

    }

    @Test
    public void nextIdBy() throws SQLException {
        long userId = 200001L;
        CallableStatement cs = conn.prepareCall("CALL PR_GET_KEY(?)");
        cs.setLong(1, userId);
        cs.execute();
        ResultSet rs = cs.getResultSet();
        long next = -1L;
        while (rs.next()) {
            next = rs.getLong(1);
        }
        assertEquals(next, 1L);
    }

}



~/resources/db_test/init.sql

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE IF NOT EXISTS T_KEYS (
  id BIGINT(20) NOT NULL AUTO_INCREMENT,
  id_user INT(11) NOT NULL,
  seq DECIMAL(19,2) NULL DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX id_user (id_user ASC))



 CREATE PROCEDURE PR_GET_KEY (in user_id integer unsigned)
 BEGIN
--   select 1;
 END




тест красный ибо процедура не грузиться в базу .
...
Рейтинг: 0 / 0
27.02.2015, 13:12
    #38890521
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Atum1,

H2 не поддерживает хранимые процедуры Oracle.
...
Рейтинг: 0 / 0
27.02.2015, 13:26
    #38890546
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
WGA,

как я понял ни оракла ни mysql /
вообще ни каких не поддерживает , только код на java .
...
Рейтинг: 0 / 0
27.02.2015, 13:34
    #38890560
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Затея изначально была провальной. PL/SQL вообще не воспроизводится ни в каких
альтренативных SQL-машинах. Это чисто Оракловая разработка и только DBMS
семейства Oracle дадут возможность использовать ее для тестирования.

Тоже самое вобщем-то можно сказать про Transact-SQL от MS.
...
Рейтинг: 0 / 0
27.02.2015, 13:37
    #38890567
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Если база новая, я бы отказался от процедур. Разве что для аналитики, когда обрабатываются большие массивы данных.
Размывание бизнес-логики по коду (часть в java, часть в pl sql), большие вопросы с версионностью - а оно надо? Даже отладить - уже вопросы возникают.
...
Рейтинг: 0 / 0
27.02.2015, 13:56
    #38890592
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
PLSQL прекрасно делает свои задачи на которые он был расчитан. И Java не является
ему альтернативой по архитектурным причинам.

Просто надо признать как факт что сегмент разработки Java увеличился стократно
за десятилетие. А количество PL кодеров вобщем-то осталось старое.
...
Рейтинг: 0 / 0
27.02.2015, 15:17
    #38890760
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
maytonЗатея изначально была провальной. PL/SQL вообще не воспроизводится ни в каких
альтренативных SQL-машинах. Это чисто Оракловая разработка и только DBMS
семейства Oracle дадут возможность использовать ее для тестирования.

Тоже самое вобщем-то можно сказать про Transact-SQL от MS.

а как же mysql ?

ну можно и не в памяти - можно и в родном mysql создавать , так же по такому принципу -

создать базу - на залить в нее таблицы и процедурки - сделать Snapshot

гонять вызов процедур в тесте .
...
Рейтинг: 0 / 0
02.03.2015, 11:57
    #38892173
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Вообще идея гонять все тесты на базе, которая не будет работать в production - изначально порочна, т. к. 100% совместимости нет нигде (самый простой пример - диапазоны типов), и выбрав H2, вы себя добровольно ограничиваете урезанным подмножеством стандарта SQL-92.
...
Рейтинг: 0 / 0
02.03.2015, 14:26
    #38892401
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Локшин МаркВообще идея гонять все тесты на базе, которая не будет работать в production - изначально порочна, т. к. 100% совместимости нет нигде (самый простой пример - диапазоны типов), и выбрав H2, вы себя добровольно ограничиваете урезанным подмножеством стандарта SQL-92.

ну можно и на mysql/oracle гонять - и делать каждый раз Snapshot.
...
Рейтинг: 0 / 0
02.03.2015, 15:30
    #38892490
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Я уже 10 лет не вижу никакого смысла следовать стандартам Ansi-SQL-*. Никогда это не приносило
никакой выгоды. Все разговоры о совместимости умирали вместе с первыми задачами разработки
storage procedures. C проприетарными data-types. С первыми попытками анализа планов выполнения
и решения проблем performance improovement.

Куплена лицензия на Ораклы? - Поставьте себе локально OracleXE. Погоняйте там тесты. Потом - в продуктив.

Забудьте навсегда это порочное слово Ansi SQL! Его нету!
...
Рейтинг: 0 / 0
02.03.2015, 16:27
    #38892592
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
maytonЗабудьте навсегда это порочное слово Ansi SQL! Его нету!
Обратите внимание: у автора поста уже в наличии 2 несовместимых сервера, и бизнес-логика (не аналитика!) в сохраненных процедурах. Оправдать это можно только legacy-кодом. Если это новая разработка, то, конечно, хозяин барин, но на первый взгляд, довольно сомнительное решение
...
Рейтинг: 0 / 0
02.03.2015, 18:11
    #38892725
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
ivanramaytonЗабудьте навсегда это порочное слово Ansi SQL! Его нету!
Обратите внимание: у автора поста уже в наличии 2 несовместимых сервера, и бизнес-логика (не аналитика!) в сохраненных процедурах. Оправдать это можно только legacy-кодом. Если это новая разработка, то, конечно, хозяин барин, но на первый взгляд, довольно сомнительное решение

Да вы правы - задачи интеграции(обмен данными) из одной базы в другую.
...
Рейтинг: 0 / 0
03.03.2015, 10:02
    #38893168
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Atum1ну можно и на mysql/oracle гонять - и делать каждый раз Snapshot.
Запустили пакет тестов. Создали базу тем или иным способом. Вставили 20 строчек в одном тесте. Что-то проверили. Почистили базу. Вставили 15 строчек в другом тесте. Проверили еще что-то... и т.д. Удалили базу.
Зачем упражнения с H2?
...
Рейтинг: 0 / 0
03.03.2015, 10:07
    #38893171
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Если у вас база используется как тупое хранилище данных типа dbf, а сверху все накрыто каким-нибудь ОРМ типа Hibernate'а, то возможно и есть смысл использовать H2 для ускорения тестов. В Вашем же случае
Atum1 есть куча процедур - с кучей бизнес логики под oracle и mysql
использование H2 - крайне сомнительное занятие.
...
Рейтинг: 0 / 0
03.03.2015, 10:54
    #38893235
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
h2 database как база для создания тестов
Atum1ivanraпропущено...

Обратите внимание: у автора поста уже в наличии 2 несовместимых сервера, и бизнес-логика (не аналитика!) в сохраненных процедурах. Оправдать это можно только legacy-кодом. Если это новая разработка, то, конечно, хозяин барин, но на первый взгляд, довольно сомнительное решение

Да вы правы - задачи интеграции(обмен данными) из одной базы в другую.

Задачи интеграции лучше решать не на уровне SP.
Если нет требования к on-line интеграции - то лучше обмен данными через файлы.
Если есть я бы пошел по пути JMS и прочих MQ
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / h2 database как база для создания тестов / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]