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

Skip to content

Commit d45c88c

Browse files
extended unit test, reasonable coverage, helps understanding the reporter
1 parent 2f22a89 commit d45c88c

2 files changed

Lines changed: 293 additions & 20 deletions

File tree

test/core/reporters/test_realtime_reporter.pkb

Lines changed: 255 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
create or replace package body test_realtime_reporter as
22

3-
procedure create_test_suites is
3+
g_actual_xml_report xmltype;
4+
5+
procedure create_test_suites_and_run is
46
pragma autonomous_transaction;
57
begin
68
execute immediate q'[create or replace package ut3_tester.check_realtime_reporting1 is
@@ -52,34 +54,271 @@ create or replace package body test_realtime_reporter as
5254
procedure test_4_nok is
5355
begin
5456
ut3.ut.expect(2).to_equal(3);
57+
ut3.ut.expect(2).to_equal(4);
5558
end;
5659

5760
procedure test_5 is
5861
begin
5962
null;
6063
end;
6164
end;]';
62-
commit;
63-
end;
65+
66+
execute immediate q'[create or replace package ut3_tester.check_realtime_reporting3 is
67+
--%suite
68+
--%suitepath(realtime_reporting)
69+
70+
--%test
71+
procedure test_6_with_runtime_error;
72+
73+
--%test
74+
procedure test_7_with_serveroutput;
75+
76+
--%afterall
77+
procedure print_and_raise;
78+
end;]';
79+
execute immediate q'[create or replace package body ut3_tester.check_realtime_reporting3 is
80+
procedure test_6_with_runtime_error is
81+
l_actual integer;
82+
begin
83+
execute immediate 'select 6 from non_existing_table' into l_actual;
84+
ut3.ut.expect(6).to_equal(l_actual);
85+
end;
86+
87+
procedure test_7_with_serveroutput is
88+
begin
89+
dbms_output.put_line('before test 7');
90+
ut3.ut.expect(7).to_equal(7);
91+
dbms_output.put_line('after test 7');
92+
end;
93+
94+
procedure print_and_raise is
95+
begin
96+
dbms_output.put_line('Now, a no_data_found exception is raised');
97+
dbms_output.put_line('dbms_output and error stack is reported for this suite.');
98+
dbms_output.put_line('A runtime error in afterall is counted as a warning.');
99+
raise no_data_found;
100+
end;
101+
end;]';
102+
103+
<<run_report_and_cache_result>>
104+
declare
105+
l_results ut3.ut_varchar2_list;
106+
begin
107+
select *
108+
bulk collect into l_results
109+
from table(ut3.ut.run('ut3_tester:realtime_reporting', ut3.ut_realtime_reporter()));
110+
g_actual_xml_report := xmltype(ut3.ut_utils.table_to_clob(l_results));
111+
end run_report_and_cache_result;
112+
end create_test_suites_and_run;
113+
114+
procedure xml_report_structure is
115+
l_actual clob;
116+
l_expected_list ut3.ut_varchar2_list;
117+
l_expected clob;
118+
begin
119+
l_actual := g_actual_xml_report.getclobval();
120+
ut3.ut_utils.append_to_list(l_expected_list, '<?xml version="1.0"?>');
121+
ut3.ut_utils.append_to_list(l_expected_list, '%<report>');
122+
ut3.ut_utils.append_to_list(l_expected_list, '% <preRun>');
123+
ut3.ut_utils.append_to_list(l_expected_list, '% <suites>');
124+
ut3.ut_utils.append_to_list(l_expected_list, '% <suite id="%">');
125+
ut3.ut_utils.append_to_list(l_expected_list, '% %<test id="%">');
126+
ut3.ut_utils.append_to_list(l_expected_list, '% %</test>');
127+
ut3.ut_utils.append_to_list(l_expected_list, '% </suite>');
128+
ut3.ut_utils.append_to_list(l_expected_list, '% </suites>');
129+
ut3.ut_utils.append_to_list(l_expected_list, '% <totalNumberOfTests>%</totalNumberOfTests>');
130+
ut3.ut_utils.append_to_list(l_expected_list, '% </preRun>');
131+
ut3.ut_utils.append_to_list(l_expected_list, '% <runEvents>');
132+
ut3.ut_utils.append_to_list(l_expected_list, '% <startSuiteEvent id="%">');
133+
ut3.ut_utils.append_to_list(l_expected_list, '% </startTestEvent>');
134+
ut3.ut_utils.append_to_list(l_expected_list, '% <startTestEvent id="%">');
135+
ut3.ut_utils.append_to_list(l_expected_list, '% </startTestEvent>');
136+
ut3.ut_utils.append_to_list(l_expected_list, '% <endTestEvent id="%">');
137+
ut3.ut_utils.append_to_list(l_expected_list, '% </endTestEvent>');
138+
ut3.ut_utils.append_to_list(l_expected_list, '% <endSuiteEvent id="%">');
139+
ut3.ut_utils.append_to_list(l_expected_list, '% </endSuiteEvent>');
140+
ut3.ut_utils.append_to_list(l_expected_list, '% </runEvents>');
141+
ut3.ut_utils.append_to_list(l_expected_list, '%</report>');
142+
l_expected := ut3.ut_utils.table_to_clob(l_expected_list, null);
143+
ut.expect(l_actual).to_be_like(l_expected);
144+
end xml_report_structure;
145+
146+
procedure total_number_of_tests is
147+
l_actual integer;
148+
l_expected integer := 7;
149+
begin
150+
l_actual := g_actual_xml_report.extract('/report/preRun/totalNumberOfTests/text()').getnumberval();
151+
ut.expect(l_actual).to_equal(l_expected);
152+
end total_number_of_tests;
153+
154+
procedure escaped_characters is
155+
l_actual varchar2(32767);
156+
l_expected varchar2(20) := 'suite &lt;A&gt;';
157+
begin
158+
l_actual :=
159+
g_actual_xml_report.extract(
160+
'//suite[@id="realtime_reporting.check_realtime_reporting1"]/description/text()'
161+
).getstringval();
162+
ut.expect(l_actual).to_equal(l_expected);
163+
end escaped_characters;
164+
165+
procedure number_of_starttestevent_nodes is
166+
l_actual integer;
167+
l_expected integer := 7;
168+
begin
169+
select count(*)
170+
into l_actual
171+
from xmltable(
172+
'/report/runEvents/startTestEvent'
173+
passing g_actual_xml_report
174+
columns id varchar2(4000) path '@id',
175+
test_number integer path 'testNumber',
176+
total_number_of_tests integer path 'totalNumberOfTests'
177+
)
178+
where id is not null
179+
and test_number is not null
180+
and total_number_of_tests is not null;
181+
ut.expect(l_actual).to_equal(l_expected);
182+
end number_of_starttestevent_nodes;
183+
184+
procedure endtestevent_nodes is
185+
l_actual sys_refcursor;
186+
l_expected sys_refcursor;
187+
begin
188+
open l_actual for
189+
select test_number, total_number_of_tests
190+
from xmltable(
191+
'/report/runEvents/endTestEvent'
192+
passing g_actual_xml_report
193+
columns id varchar2(4000) path '@id',
194+
test_number integer path 'testNumber',
195+
total_number_of_tests integer path 'totalNumberOfTests'
196+
)
197+
where id is not null
198+
and test_number is not null
199+
and total_number_of_tests is not null;
200+
open l_expected for
201+
select level as test_number,
202+
7 as total_number_of_tests
203+
from dual
204+
connect by level <= 7;
205+
ut.expect(l_actual).to_equal(l_expected).unordered;
206+
end endtestevent_nodes;
64207

65-
procedure report_produces_expected_out is
66-
l_results ut3.ut_varchar2_list;
67-
l_actual clob;
68-
l_expected varchar2(32767) := q'[<?xml version="1.0"?>%]';
208+
209+
procedure single_failed_message is
210+
l_actual varchar2(32767);
211+
l_expected varchar2(80) := '<![CDATA[Actual: 1 (number) was expected to equal: 2 (number) ]]>';
212+
begin
213+
l_actual :=
214+
g_actual_xml_report.extract(
215+
'/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting1.test context.test_2_nok"]/failedExpectations/expectation[1]/message/text()'
216+
).getstringval();
217+
ut.expect(l_actual).to_equal(l_expected);
218+
end single_failed_message;
219+
220+
procedure multiple_failed_messages is
221+
l_actual integer;
222+
l_expected integer := 2;
223+
begin
224+
select count(*)
225+
into l_actual
226+
from xmltable(
227+
'/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting2.test_4_nok"]/failedExpectations/expectation'
228+
passing g_actual_xml_report
229+
columns message clob path 'message',
230+
caller clob path 'caller'
231+
)
232+
where message is not null
233+
and caller is not null;
234+
ut.expect(l_actual).to_equal(l_expected);
235+
end multiple_failed_messages;
236+
237+
procedure serveroutput_of_test is
238+
l_actual clob;
239+
l_expected_list ut3.ut_varchar2_list;
240+
l_expected clob;
69241
begin
70-
select *
71-
bulk collect into l_results
72-
from table(ut3.ut.run('ut3_tester:realtime_reporting', ut3.ut_realtime_reporter()));
73-
l_actual := ut3.ut_utils.table_to_clob(l_results);
74-
ut.expect(l_actual).to_be_like(l_expected);
75-
end;
242+
l_actual :=
243+
g_actual_xml_report.extract(
244+
'/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting3.test_7_with_serveroutput"]/serverOutput/text()'
245+
).getclobval();
246+
ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[before test 7');
247+
ut3.ut_utils.append_to_list(l_expected_list, 'after test 7');
248+
ut3.ut_utils.append_to_list(l_expected_list, ']]>');
249+
l_expected := ut3.ut_utils.table_to_clob(l_expected_list);
250+
ut.expect(l_actual).to_equal(l_expected);
251+
end serveroutput_of_test;
252+
253+
procedure serveroutput_of_testsuite is
254+
l_actual clob;
255+
l_expected_list ut3.ut_varchar2_list;
256+
l_expected clob;
257+
begin
258+
l_actual :=
259+
g_actual_xml_report.extract(
260+
'/report/runEvents/endSuiteEvent[@id="realtime_reporting.check_realtime_reporting3"]/serverOutput/text()'
261+
).getclobval();
262+
ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[Now, a no_data_found exception is raised');
263+
ut3.ut_utils.append_to_list(l_expected_list, 'dbms_output and error stack is reported for this suite.');
264+
ut3.ut_utils.append_to_list(l_expected_list, 'A runtime error in afterall is counted as a warning.');
265+
ut3.ut_utils.append_to_list(l_expected_list, ']]>');
266+
l_expected := ut3.ut_utils.table_to_clob(l_expected_list);
267+
ut.expect(l_actual).to_equal(l_expected);
268+
end serveroutput_of_testsuite;
269+
270+
procedure error_stack_of_test is
271+
l_actual clob;
272+
l_expected_list ut3.ut_varchar2_list;
273+
l_expected clob;
274+
begin
275+
l_actual :=
276+
g_actual_xml_report.extract(
277+
'/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting3.test_6_with_runtime_error"]/errorStack/text()'
278+
).getclobval();
279+
ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[ORA-00942: table or view does not exist');
280+
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 5');
281+
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 5');
282+
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at line 6]]>');
283+
l_expected := ut3.ut_utils.table_to_clob(l_expected_list);
284+
ut.expect(l_actual).to_equal(l_expected);
285+
end error_stack_of_test;
286+
287+
procedure error_stack_of_testsuite is
288+
l_actual clob;
289+
l_expected_list ut3.ut_varchar2_list;
290+
l_expected clob;
291+
begin
292+
l_actual :=
293+
g_actual_xml_report.extract(
294+
'/report/runEvents/endSuiteEvent[@id="realtime_reporting.check_realtime_reporting3"]/errorStack/text()'
295+
).getclobval();
296+
ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[ORA-01403: no data found');
297+
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 21');
298+
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 21');
299+
ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at line 6]]>');
300+
l_expected := ut3.ut_utils.table_to_clob(l_expected_list);
301+
ut.expect(l_actual).to_equal(l_expected);
302+
end error_stack_of_testsuite;
303+
304+
procedure get_description is
305+
l_reporter ut3.ut_realtime_reporter;
306+
l_actual varchar2(4000);
307+
l_expected varchar2(80) := '%SQL Developer%';
308+
begin
309+
l_reporter := ut3.ut_realtime_reporter();
310+
l_actual := l_reporter.get_description();
311+
ut.expect(l_actual).to_be_like(l_expected);
312+
end get_description;
76313

77314
procedure remove_test_suites is
78315
pragma autonomous_transaction;
79-
begin
316+
begin/*
80317
execute immediate 'drop package ut3_tester.check_realtime_reporting1';
81318
execute immediate 'drop package ut3_tester.check_realtime_reporting2';
82-
end;
319+
execute immediate 'drop package ut3_tester.check_realtime_reporting3';
320+
*/ null;
321+
end remove_test_suites;
83322

84-
end;
323+
end test_realtime_reporter;
85324
/

test/core/reporters/test_realtime_reporter.pks

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,46 @@ create or replace package test_realtime_reporter as
44
--%suitepath(utplsql.core.reporters)
55

66
--%beforeall
7-
procedure create_test_suites;
7+
procedure create_test_suites_and_run;
88

9-
--%test(Report produces expected output)
10-
procedure report_produces_expected_out;
9+
--%test(Check XML report structure)
10+
procedure xml_report_structure;
1111

12+
--%test(Check total number of tests)
13+
procedure total_number_of_tests;
14+
15+
--%test(Check escaped characters in test suite description)
16+
procedure escaped_characters;
17+
18+
--%test(Check number of startTestEvent nodes)
19+
procedure number_of_starttestevent_nodes;
20+
21+
--%test(Check testNumber and totalNumberOfTests in endTestEvent nodes)
22+
procedure endtestevent_nodes;
23+
24+
--%test(Check expectation message for a failed test)
25+
procedure single_failed_message;
26+
27+
--%test(Check existence of multiple expectation messages for a failed test)
28+
procedure multiple_failed_messages;
29+
30+
--%test(Check for serveroutput of test)
31+
procedure serveroutput_of_test;
32+
33+
--%test(Check for serveroutput of testsuite)
34+
procedure serveroutput_of_testsuite;
35+
36+
--%test(Check for error stack of test)
37+
procedure error_stack_of_test;
38+
39+
--%test(Check for error stack of testsuite)
40+
procedure error_stack_of_testsuite;
41+
42+
--%test(Check description of reporter)
43+
procedure get_description;
44+
1245
--%afterall
1346
procedure remove_test_suites;
14-
end;
47+
48+
end test_realtime_reporter;
1549
/

0 commit comments

Comments
 (0)