Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да тествате (единично) PL/SQL приложение с интензивно използване на данни

Има няколко различни тестови инструмента за PL/SQL. Стивън Фойерщайн е написал две от тях, utplsql и Quest Code Tester за Oracle (по-рано QUTE). Аз съм голям фен на utplsql, но вече няма активна общност за поддръжка (което е жалко). Освен това има тенденция да бъде доста многословен, особено когато става въпрос за настройка на тестови устройства. Той наистина има основната виртуалност на чисти PL/SQL пакети; изходният код е малко корав, но е FOSS.

QCTO идва с GUI, което означава - подобно на други продукти на Quest, т.е. TOAD - той е само за Windows. Той не автоматизира точно генерирането на тестови данни, но предоставя интерфейс за поддръжка. Също като други продукти на Quest, QCTO е лицензиран, въпреки че има безплатно копие.

Стивън (разкритие, той е един от моите герои на Oracle) е написал сравнение на функции на всички инструменти за тестване на PL/SQL. Очевидно QOTC излиза на върха, но мисля, че сравнението е честно. Вижте го.

Съвети за тестови фикстури в utplsql

Управлението на тестови данни за модулно тестване може да бъде истинска болка във врата. За съжаление utplsql не предлага много, за да поеме тежестта. И така

  • Винаги тествайте спрямо известни стойности :
    • Избягвайте използването на dbms_random;
    • Опитайте се да ограничите използването на последователности до колони, чиито стойности нямат значение;
    • Датите също са трудни. Избягвайте твърдо кодирани дати:използвайте променливи, които се попълват със sysdate. Научете се да цените add_months() , last_day() , interval , trunc(sysdate, 'MM') и т.н.
  • Изолирайте тестовите данни от други потребители. Изградете го от нулата. Използвайте отличителни стойности, когато е възможно.
  • Създавайте само толкова тестови данни, колкото са ви необходими. Обемното тестване е различна отговорност.
  • Когато тествате процедури, които променят данните, създавайте специфични записи за всеки единичен тест.
  • Също така:не разчитайте на успешния изход от един тест, за да предоставите вход от друг тест.
  • Когато тествате процедури, които просто докладват срещу записи за споделяне на данни между тестове на единици, когато е подходящо.
  • Споделяйте рамкови данни (напр. референтни първични ключове), когато е възможно.
  • Използвайте свободни текстови полета (имена, описания, коментари), за да идентифицирате кой тест или тестове използват записа.
  • Намалете до минимум работата, свързана със създаването на нови записи:
    • Присвоявайте само стойности, които са необходими за тестовия пакет и ограниченията на таблицата;
    • Използвайте стойностите по подразбиране колкото е възможно повече;
    • Процедурирайте възможно най-много.

Други неща, които трябва да имате предвид:

  • настройването на тестово приспособление може да отнеме много време. Ако имате много данни, обмислете изграждането на процедура за настройка на статичните данни, която може да се изпълнява веднъж на сесия, и включете само непостоянни данни в ut_setup себе си. Това е особено полезно при тестване на функционалност само за четене.
  • не забравяйте, че създаването на тестови данни е само по себе си упражнение по програмиране и е податливо на грешки.
  • използвайте всички функции на utplsql. utAssert.EqQuery , utAssert.EqQueryValue , utAssert.EqTable , utAssert.EqTabCount и utAssert.Eq_RefC_Query всички са много полезни функции, когато става въпрос за извеждане на стойностите на променливи данни.
  • при диагностициране на тестово изпълнение, което не върви по начина, по който очаквахме, може да е полезно да разполагаме с използваните данни. Така че помислете за кух ut_teardown процедура и изчистване на тестовите данни в началото на ut_setup .

Работа с наследен код

Коментирането на публикацията на Гари ми напомни за още едно нещо, което може да намерите за полезно. Стивън Ф написа uplsql като PL/SQL реализация на JUnit, Java авангардът на движението Test First. Техниките на TDD обаче могат да бъдат приложени и към големи количества наследен код (в този контекст наследеният код е всеки набор от програми без никакви тестове на единици).

Ключовото нещо, което трябва да имате предвид е, че не е нужно да подлагате всичко на модулен тест веднага. Започнете постепенно. Създайте модулни тестове за нови неща, Първо тествайте . Изградете модулни тестове за битовете, които ще промените, преди да приложите промяната, така че да знаете, че продължават да работят, след като сте направили промяната.

Има много мисли в тази област, но (неизбежно, макар и срамно) те идват главно от OO програмистите. Майкъл Федърс е главният човек. Прочетете неговата статия Ефективна работа с наследен код . Ако го намерите за полезно, той впоследствие написа книга със същото име.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да дефинирам тип в oracle11g, който препраща към колекция от този тип?

  2. Как програмно идентифицирате зависимостите на съхранена процедура?

  3. Изпълнение на множество команди под друго потребителско име във файл в BASH shell

  4. Присъединете се към форума за въпроси и отговори за разработчици

  5. impdp в Oracle. Защо не създава потребители?