Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e4029e2

Browse files
committed
Implemented transaction control using %rollback annotation for tests and suites.
Added tests for suites and tests transaction control Renamed department object type in anydata tests to department$ for less probable conflict with existing objects of the database if the framework is installed in non-empty schema Fixed the error with one of existing tests
1 parent 58706b9 commit e4029e2

21 files changed

Lines changed: 381 additions & 43 deletions

source/types/ut_test.tpb

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,8 @@ create or replace type body ut_test is
2323
end if;
2424

2525
if a_rollback_type is not null then
26-
if a_rollback_type in (ut_utils.gc_rollback_auto, ut_utils.gc_rollback_on_error, ut_utils.gc_rollback_manual) then
27-
self.rollback_type := a_rollback_type;
28-
else
29-
raise_application_error(-20200,'Rollback type is not supported');
30-
end if;
26+
ut_utils.validate_rollback_type(a_rollback_type);
27+
self.rollback_type := a_rollback_type;
3128
else
3229
self.rollback_type := ut_utils.gc_rollback_auto;
3330
end if;
@@ -53,7 +50,7 @@ create or replace type body ut_test is
5350

5451
if self.rollback_type = ut_utils.gc_rollback_auto then
5552
l_savepoint := ut_utils.gen_savepoint_name;
56-
execute immediate 'savepoint '||l_savepoint;
53+
execute immediate 'savepoint ' || l_savepoint;
5754
end if;
5855

5956
begin
@@ -88,7 +85,6 @@ create or replace type body ut_test is
8885
self.teardown.execute;
8986
l_reporter.after_test_teardown(self);
9087
end if;
91-
9288

9389
end if;
9490

@@ -105,7 +101,7 @@ create or replace type body ut_test is
105101
end;
106102

107103
if self.rollback_type = ut_utils.gc_rollback_auto then
108-
execute immediate 'rollback to '||l_savepoint;
104+
execute immediate 'rollback to ' || l_savepoint;
109105
end if;
110106

111107
self.end_time := current_timestamp;

source/types/ut_test_suite.tpb

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,8 @@ create or replace type body ut_test_suite is
99
self.object_name := lower(trim(a_object_name));
1010

1111
if a_rollback_type is not null then
12-
if a_rollback_type in (ut_utils.gc_rollback_auto, ut_utils.gc_rollback_on_error, ut_utils.gc_rollback_manual) then
13-
self.rollback_type := a_rollback_type;
14-
else
15-
raise_application_error(-20200,'Rollback type is not supported');
16-
end if;
12+
ut_utils.validate_rollback_type(a_rollback_type);
13+
self.rollback_type := a_rollback_type;
1714
else
1815
self.rollback_type := ut_utils.gc_rollback_auto;
1916
end if;
@@ -66,7 +63,7 @@ create or replace type body ut_test_suite is
6663

6764
if self.rollback_type = ut_utils.gc_rollback_auto then
6865
l_savepoint := ut_utils.gen_savepoint_name;
69-
execute immediate 'savepoint '||l_savepoint;
66+
execute immediate 'savepoint ' || l_savepoint;
7067
end if;
7168

7269
if self.setup is not null then
@@ -94,7 +91,7 @@ create or replace type body ut_test_suite is
9491
self.calc_execution_result;
9592

9693
if self.rollback_type = ut_utils.gc_rollback_auto then
97-
execute immediate 'rollback to '||l_savepoint;
94+
execute immediate 'rollback to ' || l_savepoint;
9895
end if;
9996
else
10097
self.result := ut_utils.tr_error;

source/ut_utils.pkb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ create or replace package body ut_utils is
2323
begin
2424
return 'ut_'||to_char(systimestamp,'yymmddhh24mmssff');
2525
end;
26+
27+
/*
28+
Procedure: validate_rollback_type
29+
30+
Validates passed value against supported rollback types
31+
*/
32+
procedure validate_rollback_type(a_rollback_type number) is
33+
begin
34+
if a_rollback_type not in (gc_rollback_auto, gc_rollback_manual) then
35+
raise_application_error(-20200,'Rollback type is not supported');
36+
end if;
37+
end validate_rollback_type;
2638

2739
procedure debug_log(a_message varchar2) is
2840
begin

source/ut_utils.pks

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ create or replace package ut_utils is
2525
gc_rollback_auto constant number(1) := 0; -- rollback after each test and suite
2626
gc_rollback_manual constant number(1) := 1; -- leave transaction control manual
2727
--gc_rollback_on_error constant number(1) := 2; -- rollback tests only on error
28+
29+
ex_unsopported_rollback_type exception;
30+
pragma exception_init(ex_unsopported_rollback_type, -20200);
2831

2932

3033
gc_max_sring_length constant integer := 4000;
@@ -61,6 +64,13 @@ create or replace package ut_utils is
6164
function to_string(a_value date) return varchar2;
6265

6366
function to_string(a_value timestamp_unconstrained) return varchar2;
67+
68+
/*
69+
Procedure: validate_rollback_type
70+
71+
Validates passed value against supported rollback types
72+
*/
73+
procedure validate_rollback_type(a_rollback_type number);
6474

6575
end ut_utils;
6676
/

tests/RunAll.sql

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ set serveroutput on size unlimited format truncated
1111
@@helpers/ut_example_tests.pks
1212
@@helpers/ut_example_tests.pkb
1313
@@helpers/check_annotation_parsing.prc
14+
@@helpers/cre_tab_ut$test_table.sql
15+
@@helpers/ut_transaction_control.pck
1416

1517
--Tests to invoke
1618

@@ -27,6 +29,17 @@ set serveroutput on size unlimited format truncated
2729
@@lib/RunTest.sql ut_test/ut_test.TeardownExecutedAfterTest.sql
2830
@@lib/RunTest.sql ut_test/ut_test.TeardownProcedureNameInvalid.sql
2931
@@lib/RunTest.sql ut_test/ut_test.TeardownProcedureNameNull.sql
32+
33+
@@lib/RunTest.sql ut_test/ut_test.Rollback_type.Auto.sql
34+
@@lib/RunTest.sql ut_test/ut_test.Rollback_type.AutoOnFailure.sql
35+
@@lib/RunTest.sql ut_test/ut_test.Rollback_type.Manual.sql
36+
@@lib/RunTest.sql ut_test/ut_test.Rollback_type.ManualOnFailure.sql
37+
38+
@@lib/RunTest.sql ut_test_suite/ut_test_suite.Rollback_type.Auto.sql
39+
@@lib/RunTest.sql ut_test_suite/ut_test_suite.Rollback_type.AutoOnFailure.sql
40+
@@lib/RunTest.sql ut_test_suite/ut_test_suite.Rollback_type.Manual.sql
41+
@@lib/RunTest.sql ut_test_suite/ut_test_suite.Rollback_type.ManualOnFailure.sql
42+
3043
@@lib/RunTest.sql ut_utils/ut_utils.test_result_to_char.RunsWithInvalidValues.sql
3144
@@lib/RunTest.sql ut_utils/ut_utils.test_result_to_char.RunsWithNullValue.sql
3245
@@lib/RunTest.sql ut_utils/ut_utils.test_result_to_char.Success.sql
@@ -108,6 +121,8 @@ set serveroutput on size unlimited format truncated
108121
--Global cleanup
109122
drop package ut_example_tests;
110123
drop procedure check_annotation_parsing;
124+
drop package ut_transaction_control;
125+
drop table ut$test_table;
111126

112127
--Finally
113128
@@lib/RunSummary
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
create table ut$test_table (val varchar2(1));
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
create or replace package ut_transaction_control as
2+
3+
function count_rows(a_val varchar2) return number;
4+
5+
procedure setup;
6+
7+
procedure test;
8+
9+
procedure test_failure;
10+
11+
end;
12+
/
13+
create or replace package body ut_transaction_control
14+
as
15+
16+
function count_rows(a_val varchar2) return number is
17+
l_cnt number;
18+
begin
19+
select count(*)
20+
into l_cnt
21+
from ut$test_table t
22+
where t.val = a_val;
23+
24+
return l_cnt;
25+
end;
26+
27+
procedure setup is begin
28+
insert into ut$test_table values ('s');
29+
end;
30+
31+
procedure test is
32+
begin
33+
insert into ut$test_table values ('t');
34+
end;
35+
36+
procedure test_failure is
37+
begin
38+
insert into ut$test_table values ('t');
39+
--raise no_data_found;
40+
raise_application_error(-20001,'Error');
41+
end;
42+
43+
end;
44+
/

tests/ut_assert/ut_assert.are_equal.anydata.GivesFailureWhenComparingDifferentData.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
PROMPT Gives a success when comparing equal oracle objects
22
--Arrange
3-
create or replace type department as object(
3+
create or replace type department$ as object(
44
dept_name varchar2(30)
55
);
66
/
77

88
declare
9-
l_expected department := department('HR');
10-
l_actual department := department('IT');
9+
l_expected department$ := department$('HR');
10+
l_actual department$ := department$('IT');
1111
l_result integer;
1212
begin
1313
--Act
@@ -23,4 +23,4 @@ end;
2323
/
2424

2525
--Cleanup
26-
drop type department;
26+
drop type department$;

tests/ut_assert/ut_assert.are_equal.anydata.GivesSuccessWhenComparingTheSameData.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
PROMPT Gives a success when comparing equal oracle objects
22
--Arrange
3-
create or replace type department as object(
3+
create or replace type department$ as object(
44
dept_name varchar2(30)
55
);
66
/
77

88
declare
9-
l_expected department := department('hr');
10-
l_actual department := department('hr');
9+
l_expected department$ := department$('hr');
10+
l_actual department$ := department$('hr');
1111
l_result integer;
1212
begin
1313
--Act
@@ -23,4 +23,4 @@ end;
2323
/
2424

2525
--Cleanup
26-
drop type department;
26+
drop type department$;
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
PROMPT Puts Object structure as string into the Assert
22
--Arrange
3-
create or replace type department as object(
3+
create or replace type department$ as object(
44
dept_name varchar2(30)
55
);
66
/
77

88
declare
9-
l_expected department := department('HR');
10-
l_actual department := department('IT');
9+
l_expected department$ := department$('HR');
10+
l_actual department$ := department$('IT');
1111
l_result integer;
1212
l_assert_result ut_assert_result;
1313
begin
@@ -17,8 +17,8 @@ begin
1717
l_assert_result := treat(ut_assert.get_asserts_results()(1) as ut_assert_result);
1818

1919
--Assert
20-
if l_assert_result.expected_value_string like q'[%DEPARTMENT(%dept_name => 'HR'%)%]'
21-
and l_assert_result.actual_value_string like q'[%DEPARTMENT(%dept_name => 'IT'%)%]'
20+
if l_assert_result.expected_value_string like q'[%DEPARTMENT$(%dept_name => 'HR'%)%]'
21+
and l_assert_result.actual_value_string like q'[%DEPARTMENT$(%dept_name => 'IT'%)%]'
2222
then
2323
:test_result := ut_utils.tr_success;
2424
else
@@ -29,4 +29,4 @@ end;
2929
/
3030

3131
--Cleanup
32-
drop type department;
32+
drop type department$;

0 commit comments

Comments
 (0)