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

Skip to content

Commit 78adde2

Browse files
committed
first operation draft
Added Custom suite example added decorator reporter abstract class for decorator pattern rename ut_single_test into ut_test deleted deprecated reporters
1 parent 1d3109b commit 78adde2

31 files changed

Lines changed: 439 additions & 398 deletions
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
--Shows how to create a test suite with the default reporter which is dbms_output
2+
--No tables are used for this.
3+
--Suite Management packages are when developed will make this easier.
4+
Clear Screen
5+
Set Serveroutput On Size Unlimited
6+
7+
declare
8+
suite1 ut_test_suite;
9+
suite2 ut_test_suite;
10+
suite_complex ut_test_suite;
11+
testtoexecute ut_test;
12+
reporter ut_suite_reporter;
13+
begin
14+
suite1 := ut_test_suite(a_suite_name => 'Test Suite 1' /*,a_items => ut_test_objects_list()*/);
15+
16+
testtoexecute := ut_test(a_object_name => 'ut_exampletest'
17+
,a_test_procedure => 'ut_exAmpletest'
18+
,a_test_name => 'Example test1'
19+
,a_setup_procedure => 'Setup'
20+
,a_teardown_procedure => 'tEardown');
21+
22+
suite1.add_item(testtoexecute);
23+
24+
suite2 := ut_test_suite(a_suite_name => 'Test Suite 2' /*,a_items => ut_test_objects_list()*/);
25+
testtoexecute := ut_test(a_object_name => 'UT_EXAMPLETEST2'
26+
,a_test_procedure => 'UT_EXAMPLETEST'
27+
,a_setup_procedure => 'SETUP'
28+
,a_teardown_procedure => 'TEARDOWN');
29+
30+
suite2.add_item(testtoexecute);
31+
32+
suite_complex := ut_test_suite(a_suite_name => 'Complex Test Suite', a_items => ut_test_objects_list(suite1, suite2));
33+
34+
-- provide a reporter to process results
35+
--reporter := ut_dbms_output_suite_reporter;
36+
reporter := ut_custom_reporter(a_tab_size => 2);
37+
suite_complex.execute(reporter);
38+
end;
39+
/
40+
41+
42+
43+
44+
45+

examples/RunExampleTestSuite.sql

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,43 @@
1-
PL/SQL Developer Test script 3.0
2-
45
31
--Shows how to create a test suite in code and call the test runner.
42
--No tables are used for this.
53
--Suite Management packages are when developed will make this easier.
6-
--Clear Screen
7-
--Set Serveroutput On Size Unlimited
4+
Clear Screen
5+
Set Serveroutput On Size Unlimited
86

97
declare
10-
testtoexecute ut_single_test;
118
suite ut_test_suite;
12-
-- testresults ut_suite_results;
13-
test_item ut_single_test;
9+
testtoexecute ut_test;
10+
test_item ut_test;
1411
begin
15-
suite := ut_test_suite(a_suite_name => 'Test Suite Name' /*,a_tests => ut_Test_List()*/);
12+
suite := ut_test_suite(a_suite_name => 'Test Suite Name' /*,a_items => ut_test_objects_list()*/);
1613

17-
testtoexecute := ut_single_test(a_object_name => 'ut_exampletest'
18-
,a_test_procedure => 'ut_exAmpletest'
19-
,a_setup_procedure => 'Setup'
20-
,a_teardown_procedure => 'tEardown');
14+
testtoexecute := ut_test(a_object_name => 'ut_exampletest'
15+
,a_test_procedure => 'ut_exAmpletest'
16+
,a_setup_procedure => 'Setup'
17+
,a_teardown_procedure => 'tEardown');
2118

22-
suite.add_test(testtoexecute);
19+
suite.add_item(testtoexecute);
2320

24-
testtoexecute := ut_single_test(a_object_name => 'UT_EXAMPLETEST2'
25-
,a_test_procedure => 'UT_EXAMPLETEST'
26-
,a_setup_procedure => 'SETUP'
27-
,a_teardown_procedure => 'TEARDOWN');
21+
testtoexecute := ut_test(a_object_name => 'UT_EXAMPLETEST2'
22+
,a_test_procedure => 'UT_EXAMPLETEST'
23+
,a_setup_procedure => 'SETUP'
24+
,a_teardown_procedure => 'TEARDOWN');
2825

29-
suite.add_test(testtoexecute);
30-
suite.execute;
26+
suite.add_item(testtoexecute);
27+
suite.execute;
3128

3229
-- No reporter used in this example so outputing the results manually.
3330
for test_idx in suite.items.first .. suite.items.last loop
34-
test_item := treat(suite.items(test_idx) as ut_single_test);
31+
test_item := treat(suite.items(test_idx) as ut_test);
3532
dbms_output.put_line('---------------------------------------------------');
3633
dbms_output.put_line('Test:' || test_item.call_params.object_name || '.' || test_item.call_params.test_procedure);
3734
dbms_output.put_line('Result: ' || test_item.execution_result.result_to_char);
3835
dbms_output.put_line('Assert Results:');
3936
for i in test_item.assert_results.first .. test_item.assert_results.last loop
40-
dbms_output.put_line(i || ' - result: ' ||
41-
test_item.assert_results(i).result_to_char);
37+
dbms_output.put_line(i || ' - result: ' || test_item.assert_results(i).result_to_char);
4238
dbms_output.put_line(i || ' - Message: ' || test_item.assert_results(i).message);
4339
end loop;
4440
end loop;
4541
dbms_output.put_line('---------------------------------------------------');
4642
end;
47-
48-
0
49-
4
50-
call_params.owner
51-
52-
schema
53-
part1
43+
/
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
--Shows how to create a test suite with the default reporter which is dbms_output
2+
--No tables are used for this.
3+
--Suite Management packages are when developed will make this easier.
4+
Clear Screen
5+
Set Serveroutput On Size Unlimited
6+
7+
declare
8+
suite ut_test_suite;
9+
testtoexecute ut_test;
10+
reporter ut_suite_reporter;
11+
begin
12+
-- Install ut_custom_reporter first from example folder
13+
14+
suite := ut_test_suite(a_suite_name => 'Test Suite Name' /*,a_items => ut_test_objects_list()*/);
15+
16+
testtoexecute := ut_test(a_object_name => 'ut_exampletest'
17+
,a_test_procedure => 'ut_exAmpletest'
18+
,a_setup_procedure => 'Setup'
19+
,a_teardown_procedure => 'tEardown');
20+
21+
suite.add_item(testtoexecute);
22+
23+
testtoexecute := ut_test(a_object_name => 'UT_EXAMPLETEST2'
24+
,a_test_procedure => 'UT_EXAMPLETEST'
25+
,a_setup_procedure => 'SETUP'
26+
,a_teardown_procedure => 'TEARDOWN');
27+
28+
suite.add_item(testtoexecute);
29+
30+
-- provide a reporter to process results tabbing each hierarcy level by tab_size
31+
reporter := ut_custom_reporter(a_tab_size => 2);
32+
suite.execute(reporter);
33+
end;
34+
/

examples/RunExampleTestSuiteWithDBMSOutputReporter.sql

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,33 @@
33
--Suite Management packages are when developed will make this easier.
44
Clear Screen
55
Set Serveroutput On Size Unlimited
6-
Declare
7-
testtoexecute ut_types.single_test;
8-
Suite Ut_Types.Test_Suite;
9-
Testresults Ut_Types.Test_Suite_Results;
10-
reporter ut_types.test_suite_reporter;
11-
12-
Begin
13-
Suite.Suite_name := 'Test Suite Name';
14-
Suite.Tests := ut_Types.Test_List();
15-
16-
Testtoexecute.object_name := 'ut_exampletest';
17-
Testtoexecute.setup_procedure := 'Setup';
18-
TestToExecute.teardown_procedure := 'TearDown';
19-
TestToExecute.test_procedure := 'ut_exampletest';
20-
21-
Suite.Tests.Extend;
22-
Suite.Tests(Suite.Tests.Last) := Testtoexecute;
23-
24-
Testtoexecute.object_name := 'ut_exampletest2';
25-
Testtoexecute.setup_procedure := 'Setup';
26-
TestToExecute.teardown_procedure := 'TearDown';
27-
TestToExecute.test_procedure := 'ut_exampletest';
28-
29-
Suite.Tests.Extend;
30-
Suite.Tests(Suite.Tests.LAST) := TestToExecute;
31-
32-
33-
ut_Test_Runner.Execute_Tests(Suite,TestResults);
34-
END;
6+
7+
declare
8+
suite ut_test_suite;
9+
testtoexecute ut_test;
10+
reporter ut_suite_reporter;
11+
begin
12+
suite := ut_test_suite(a_suite_name => 'Test Suite Name' /*,a_items => ut_test_objects_list()*/);
13+
14+
testtoexecute := ut_test(a_object_name => 'ut_exampletest'
15+
,a_test_procedure => 'ut_exAmpletest'
16+
,a_setup_procedure => 'Setup'
17+
,a_teardown_procedure => 'tEardown');
18+
19+
suite.add_item(testtoexecute);
20+
21+
testtoexecute := ut_test(a_object_name => 'UT_EXAMPLETEST2'
22+
,a_test_procedure => 'UT_EXAMPLETEST'
23+
,a_setup_procedure => 'SETUP'
24+
,a_teardown_procedure => 'TEARDOWN');
25+
26+
suite.add_item(testtoexecute);
27+
28+
-- provide a reporter to process results
29+
reporter := ut_dbms_output_suite_reporter;
30+
suite.execute(reporter);
31+
end;
32+
/
3533

3634

3735

examples/RunExampleTestThroughBaseClass.sql

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,20 @@
22
--No tables are used for this and exceptions are handled better.
33
Clear Screen
44
Set Serveroutput On Size Unlimited
5+
56
declare
6-
testtoexecute ut_types.single_test;
7-
testresults ut_types.test_execution_result;
7+
simple_test ut_test;
8+
reporter ut_suite_reporter;
89
begin
9-
--testtoexecute.typeoftest := ut_types.tt_package;
10-
testtoexecute.owner_name := user;
11-
testtoexecute.object_name := 'ut_exampletest';
12-
testtoexecute.setup_procedure := 'setup';
13-
testtoexecute.teardown_procedure := 'teardown';
14-
testtoexecute.test_procedure := 'ut_exampletest';
15-
ut_test_execute.execute_test(testtoexecute,testresults);
1610

17-
--for now result is an integer but will need a look upto make pretty later.
18-
dbms_output.put_line('result: ' || ut_types.test_result_to_char(testresults.result) );
19-
dbms_output.put_line('assert results:');
20-
for i in testresults.assert_results.first .. testresults.assert_results.last
21-
Loop
22-
dbms_output.put_line(i || ' - result: ' || ut_types.test_result_to_char(testresults.assert_results(i).result) );
23-
dbms_output.put_line(i || ' - message: ' || testresults.assert_results(i).message);
24-
end loop;
11+
simple_test := ut_test(a_object_name => 'ut_exampletest'
12+
,a_test_procedure => 'ut_exampletest'
13+
,a_test_name => 'Simple test1'
14+
,a_owner_name => user
15+
,a_setup_procedure => 'setup'
16+
,a_teardown_procedure => 'teardown');
17+
18+
reporter := ut_dbms_output_suite_reporter;
19+
simple_test.execute(reporter);
2520
end;
21+
/

examples/ut_custom_reporter.typ

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
create or replace type ut_custom_reporter under ut_dbms_output_suite_reporter
2+
(
3+
-- Author : PAZZZ
4+
-- Created : 20.07.2016 22:51:51
5+
-- Purpose :
6+
7+
-- Attributes
8+
lvl integer,
9+
tab_size integer,
10+
11+
-- Member functions and procedures
12+
constructor function ut_custom_reporter(a_tab_size integer default 4) return self as result,
13+
member function tab(self in ut_custom_reporter) return varchar2,
14+
overriding member procedure print(msg varchar2),
15+
16+
overriding member procedure begin_suite(self in out nocopy ut_custom_reporter, a_suite_name in varchar2),
17+
overriding member procedure end_suite(self in out nocopy ut_custom_reporter, a_suite_name in varchar2, a_suite_execution_result in ut_execution_result),
18+
overriding member procedure begin_test(self in out nocopy ut_custom_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params),
19+
overriding member procedure end_test(self in out nocopy ut_custom_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params, a_execution_result in ut_execution_result, a_assert_list in ut_assert_list)
20+
)
21+
not final
22+
/
23+
create or replace type body ut_custom_reporter is
24+
25+
constructor function ut_custom_reporter(a_tab_size integer default 4) return self as result is
26+
begin
27+
self.name := $$plsql_unit;
28+
self.lvl := 0;
29+
self.tab_size := a_tab_size;
30+
return;
31+
end;
32+
33+
member function tab(self in ut_custom_reporter) return varchar2 is
34+
tab_str varchar2(255);
35+
begin
36+
tab_str := rpad(' ', lvl * tab_size);
37+
return tab_str;
38+
end tab;
39+
40+
overriding member procedure print(msg varchar2) is
41+
begin
42+
(self as ut_dbms_output_suite_reporter).print(tab || msg);
43+
end print;
44+
45+
overriding member procedure begin_suite(self in out nocopy ut_custom_reporter, a_suite_name in varchar2) as
46+
begin
47+
(self as ut_dbms_output_suite_reporter).begin_suite(a_suite_name);
48+
lvl := lvl + 1;
49+
end;
50+
51+
overriding member procedure end_suite(self in out nocopy ut_custom_reporter, a_suite_name in varchar2, a_suite_execution_result in ut_execution_result) as
52+
begin
53+
lvl := lvl - 1;
54+
(self as ut_dbms_output_suite_reporter).end_suite(a_suite_name,a_suite_execution_result);
55+
end;
56+
57+
overriding member procedure begin_test(self in out nocopy ut_custom_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params) as
58+
begin
59+
(self as ut_dbms_output_suite_reporter).begin_test(a_test_name,a_test_call_params);
60+
lvl := lvl + 1;
61+
end;
62+
63+
overriding member procedure end_test(self in out nocopy ut_custom_reporter, a_test_name in varchar2, a_test_call_params in ut_test_call_params, a_execution_result in ut_execution_result, a_assert_list in ut_assert_list) as
64+
begin
65+
lvl := lvl - 1;
66+
(self as ut_dbms_output_suite_reporter).end_test(a_test_name, a_test_call_params, a_execution_result, a_assert_list);
67+
end;
68+
69+
end;
70+
/

source/install.sql

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,19 @@
77
@@types/ut_suite_reporter.tps
88
@@types/ut_test_object.tps
99
@@types/ut_test_objects_list.tps
10-
@@types/ut_single_test.tps
10+
@@types/ut_test.tps
1111
@@types/ut_test_suite.tps
12-
@@types/ut_suite_reporters.tps
13-
@@types/ut_complex_suite_reporter.tps
12+
@@types/ut_reporter_decorator.tps
1413
@@types/ut_dbms_output_suite_reporter.tps
15-
@@ut_types.pks
16-
@@ut_test_runner.pks
17-
@@ut_types.pkb
14+
@@ut_utils.pks
15+
@@ut_utils.pkb
1816
@@types/ut_assert_result.tpb
1917
@@types/ut_execution_result.tpb
20-
@@types/ut_single_test.tpb
18+
@@types/ut_test.tpb
2119
@@types/ut_test_suite.tpb
20+
@@types/ut_test_call_params.tpb
21+
@@types/ut_reporter_decorator.tpb
2222
@@types/ut_dbms_output_suite_reporter.tpb
2323
@@ut_metadata.pkb
24-
@@ut_test_runner.pkb
2524
@@ut_assert.pkb
2625

0 commit comments

Comments
 (0)