CelestaUnit — различия между версиями

Материал из Course Orchestra
Перейти к: навигация, поиск
(Описание нового функционала для celestaunit)
м
 
Строка 1: Строка 1:
 
{{Celesta}}
 
{{Celesta}}
  
В Celesta реализована поддержка модульных тестов процедур, редактирующих данных.
+
В Celesta реализована поддержка модульных тестов процедур, редактирующих данные.
  
 
Чтобы ей воспользоваться, необходимо скачать модуль celestaunit с SVN: [https://share.curs.ru/svn/grains/celestaunit https://share.curs.ru/svn/grains/celestaunit]  и включить его в ваш score path на верхний уровень (подпапка папки с вашими гранулами).  Никакой другой установки/настройки инструментов в большинстве случаев не требуется.
 
Чтобы ей воспользоваться, необходимо скачать модуль celestaunit с SVN: [https://share.curs.ru/svn/grains/celestaunit https://share.curs.ru/svn/grains/celestaunit]  и включить его в ваш score path на верхний уровень (подпапка папки с вашими гранулами).  Никакой другой установки/настройки инструментов в большинстве случаев не требуется.

Текущая версия на 16:42, 3 апреля 2018

Внимание! Вы просматриваете документацию к Celesta 6.x. Документация по Celesta 7.x доступна на courseorchestra.github.io/celesta.

1. Справочник Celesta

1.1 Введение и основные понятия
1.2 Запуск и авто-обновление
1.3 Базовая настройка
1.4 Системные таблицы
1.5 CelestaSQL
1.6 CelestaDoc
1.7 Контексты сессии и вызова
1.8 Курсоры
1.9 BLOB-поля
1.10 Option-поля
1.11 Защита от потерянных обновлений
1.12 Метаданные Celesta
1.13 CelestaUnit

2. Celesta и базы данных

2.1 Особенности работы Celesta с поддерживаемыми типами СУБД
2.2 Проектирование базы данных Celesta в DBSchema

3. Создание решений с использованием Celesta для ShowCase

3.1 Программа обучения Celesta
3.2 Подготовка рабочего места для работы с Celesta
3.2.1 Для разработчиков платформы
3.2.2 Для разработчиков решений
3.3 Системные гранулы Celesta
3.3.1 common
3.3.1.1 Экспорт/импорт данных
3.3.1.2 Навигатор
3.3.1.3 Серии номеров
3.3.1.4 Иерархия Дьюи
3.3.1.5 Системные функции
3.3.1.6 Реестр настроек
3.3.1.7 Mailsender
3.3.1.8 Common.filter
3.3.2 common.api
3.3.4 security
3.3.3 lyra
3.4 Стандартные гранулы Celesta
3.4.1 dirusing
3.4.2 workflow
3.4.3 File repository
3.5 Отрисовка элементов Showcase при помощи Celesta
3.5.1 Конвертер XML-JSON
3.5.2 Навигатор (Navigator)
3.5.3 Информационная панель (Datapanel)
3.5.4 Серверное действие (Server activity)
3.5.5 Вебтекст (WebText)
3.5.6 Грид (Grid)
3.5.6.1 Панель инструментов (ToolBar)
3.5.7 XForms
3.5.7.1 Селекторы
3.5.7.2 Submission
3.5.7.3 Загрузка/Выгрузка файлов (Upload/Download)

5. Решение проблем

5.1 Проблемы с кодировкой jython-файлов

В Celesta реализована поддержка модульных тестов процедур, редактирующих данные.

Чтобы ей воспользоваться, необходимо скачать модуль celestaunit с SVN: https://share.curs.ru/svn/grains/celestaunit и включить его в ваш score path на верхний уровень (подпапка папки с вашими гранулами). Никакой другой установки/настройки инструментов в большинстве случаев не требуется.

Юнит-тесты выполняются на встроенной непосредственно в Celesta базе H2, работающей в режиме in-memory. Эта база не требует установки, запускается моментально и исчезает после завершения тестов. По умолчанию в этой базе отключена проверка ссылочной целостности внешних ключей, что позволяет беспрепятственно заполнять таблицы небольшим количеством тестовых данных. Но при желании проверку ссылочной целостности можно включить.

База H2 разворачивается пустой при каждом запуске группы тестов и сохраняется до окончания запуска, поэтому в setup-методе вы можете заполнять таблицы тестовыми данными. Celestaunit-тесты, как и прочие celesta-процедуры, могут быть запущены параллельно.

Иногда может потребоваться очистка базы H2 между тестами, для этого в основной класс тестов добавлен метод setCleanDB. При передаче в этот метод значения True после завершения теста база H2 будет полностью очищена.

Пример использования

Ниже приведен пример модульного теста. Для его запуска достаточно запустить его как Jython Unit Test из Eclipse или IDEA:

# coding=UTF-8
# Import celestaunit должен идти первым
from celestaunit import CelestaUnit
 
# Импорт гранул и прочего должен идти после импорта celestaunit.
from ztest._ztest_orm import viewWithGetDateCursor
from ztest._ztest_orm import tableForGetDateInViewCursor
from java.sql import Timestamp
from java.time import LocalDateTime
 
 
class TestGetDate(CelestaUnit):
    def test_getdate_in_view(self):
        viewCursor = viewWithGetDateCursor(self.context)
        self.assertEqual(0, viewCursor.count())
 
        tableCursor = tableForGetDateInViewCursor(self.context)
 
        tableCursor.date = Timestamp.valueOf(LocalDateTime.now().minusDays(1))
        tableCursor.insert()
        self.assertEqual(0, viewCursor.count())
 
        tableCursor.clear()
        tableCursor.date = Timestamp.valueOf(LocalDateTime.now().plusDays(1))
        tableCursor.insert()
        self.assertEqual(1, viewCursor.count())


Важная информация
  • Импорт модуля CelestaUnit должен всегда стоять первым в модуле с тестами. Это обеспечит корректное создание initcontext и инициализацию гранул таким же образом, как это происходит в Celesta при запуске в production-режиме.
  • По умолчанию celestaunit предполагает, что score path находится на один уровень выше, чем путь к модулю celestaunit, поэтому если так и есть, до дополнительной конфигурации не требуется.
  • По умолчанию celestaunit работает с H2 в inmemory-режиме с отключенной Reference Integrity check, но всё это можно сконфигурировать, в частности, можно перенастроиться на иную СУБД.

Изменение настроек CelestaUnit по умолчанию

Если мы всё-таки хотим конфигурировать, то это можно сделать через модификацию модуля testparams (заполняя глобальную переменную CELESTA_PROPERTIES нужными данными), при этом testparams необходимо импортировать ещё раньше, чем celestaunit: import testparams testparams.CELESTA_PROPERTIES.put('rdbms.connection.url', ....) #your preferred RDBMS connection url here from celestaunit import CelestaUnit


Каким образом уменьшить количество инициализируемых гранул

Если на вашем score.path находится много гранул, и их полная инициализация занимает слишком много времени, вы можете явно указать, какие гранулы будут инициализироваться. Для этого надо добавить идентификаторы гранулы в список testparams.INITIALIZING_GRAINS. Если этот список пустой, то при инициализации celestaunit будут инициализироваться все гранулы.