Если у меня есть функция public.foo(bar text) returns text
...
создать другую функцию, как это:
create or replace function test.foo() returns void as $$
begin
perform assert_equals('stuff', public.foo('thing'));
perform assert_null(public.foo(null));
...
end $$ language plpgsql;
У меня есть некоторые функции, такие как утверждают следующее. Я намеренно использую те же имена и подписи, что и JUnit.
CREATE OR REPLACE FUNCTION assert_equals(expected text, actual text) RETURNS void AS $$
begin
if expected = actual or (expected is null and actual is null) then
--do nothing
else
raise exception 'Assertion Error. Expected <%> but was <%>', expected, actual;
end if;
end $$ LANGUAGE plpgsql;
У меня также есть функции для выполнения всех тестов:
CREATE OR REPLACE FUNCTION test.run_all() RETURNS void AS $$
declare
skip constant name[] = '{run_all}';
test_schema_name constant name = 'test';
proc pg_catalog.pg_proc%rowtype;
started timestamptz;
begin
raise notice 'Time(m) Name';
for proc in select p.* from pg_catalog.pg_proc p join pg_catalog.pg_namespace n on pronamespace = n.oid where nspname = test_schema_name and not proname = any(skip) order by proname loop
started = clock_timestamp();
execute format('select %s.%s();', test_schema_name, proc.proname);
raise notice '% %.%()', to_char(clock_timestamp() - started, 'MI:SS:MS'), test_schema_name, proc.proname;
end loop;
end $$ LANGUAGE plpgsql;
Что касается вашего вопроса:
Какой процент кода покрыта юнит-тестов, и как вы меру Это?
Не уверен. Думаю, мне нужен инструмент для покрытия кода.
UPDATE: Похоже, что вы можете проверить покрытие кода с https://github.com/kputnam/piggly
Как вы решаете, какие модули для модульного тестирования в первую очередь?
самые complex единицы.
Считаете ли вы, что время и усилия, которые вы вложили в свое подразделение испытательный жгут, окупились или нет?
Определенно рад, что я использую модульное тестирование.
Также смотрите в:
http://pgtap.org/
http://en.dklab.ru/lib/dklab_pgunit/
http://www.epictest.org/
Хотя тема интересна, то этот вопрос, как вы попросили его бедный подходят для этого сайта, так как он зовёт расширенное обсуждение из нескольких точек, а не автономные ответы на конкретный вопрос или проблему. Ознакомьтесь с этими статьями справки: http://stackoverflow.com/help/on-topic http://stackoverflow.com/help/dont-ask – IMSoP