@@ -53,70 +53,76 @@ create or replace type body ut_test is
5353 execute immediate 'savepoint ' || l_savepoint;
5454 end if;
5555
56- begin
57- ut_utils.debug_log('ut_test.execute');
58-
59- self.start_time := current_timestamp;
56+ ut_utils.debug_log('ut_test.execute');
57+
58+ self.start_time := current_timestamp;
6059
61- if self.is_valid() then
62-
63- if self.setup is not null then
64- l_reporter.before_test_setup(self);
65- self.setup.execute;
66- l_reporter.after_test_setup(self);
60+ if nvl(self.ignore_flag,0) != 1 then
61+ begin
62+
63+ if self.is_valid() then
64+
65+ if self.setup is not null then
66+ l_reporter.before_test_setup(self);
67+ self.setup.execute;
68+ l_reporter.after_test_setup(self);
69+ end if;
70+
71+ l_reporter.before_test_execute(self);
72+ begin
73+ self.test.execute;
74+ exception
75+ when others then
76+ -- dbms_utility.format_error_backtrace is 10g or later
77+ -- utl_call_stack package may be better but it's 12c but still need to investigate
78+ -- article with details: http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html
79+ ut_utils.debug_log('testmethod failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
80+
81+ ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
82+ end;
83+ l_reporter.after_test_execute(self);
84+
85+ if self.teardown is not null then
86+ l_reporter.before_test_teardown(self);
87+ self.teardown.execute;
88+ l_reporter.after_test_teardown(self);
89+ end if;
90+
6791 end if;
6892
69- l_reporter.before_test_execute(self);
70- begin
71- self.test.execute;
72- exception
73- when others then
74- -- dbms_utility.format_error_backtrace is 10g or later
75- -- utl_call_stack package may be better but it's 12c but still need to investigate
76- -- article with details: http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html
77- ut_utils.debug_log('testmethod failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
78-
79- ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
80- end;
81- l_reporter.after_test_execute(self);
93+ exception
94+ when others then
95+ if sqlcode = -04068 then
96+ --raise on ORA-04068: existing state of packages has been discarded to avoid unrecoverable session exception
97+ raise;
98+ end if;
99+ ut_utils.debug_log('ut_test.execute failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
100+ -- most likely occured in setup or teardown if here.
101+ ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_stack);
102+ ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
103+ end;
82104
83- if self.teardown is not null then
84- l_reporter.before_test_teardown(self);
85- self.teardown.execute;
86- l_reporter.after_test_teardown(self);
87- end if;
88-
105+ if self.rollback_type = ut_utils.gc_rollback_auto then
106+ execute immediate 'rollback to ' || l_savepoint;
89107 end if;
90108
91- exception
92- when others then
93- if sqlcode = -04068 then
94- --raise on ORA-04068: existing state of packages has been discarded to avoid unrecoverable session exception
95- raise;
96- end if;
97- ut_utils.debug_log('ut_test.execute failed-' || sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
98- -- most likely occured in setup or teardown if here.
99- ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_stack);
100- ut_assert.report_error(sqlerrm(sqlcode) || ' ' || dbms_utility.format_error_backtrace);
101- end;
109+ self.end_time := current_timestamp;
102110
103- if self.rollback_type = ut_utils.gc_rollback_auto then
104- execute immediate 'rollback to ' || l_savepoint;
111+ l_reporter.before_asserts_process(self);
112+ self.items := ut_assert.get_asserts_results();
113+
114+ self.calc_execution_result;
115+
116+ for i in 1 .. self.items.count loop
117+ l_reporter.on_assert_process(treat(self.items(i) as ut_assert_result));
118+ end loop;
119+
120+ l_reporter.after_asserts_process(self);
121+ else
122+ self.end_time := current_timestamp;
123+ self.result := ut_utils.tr_ignore;
105124 end if;
106125
107- self.end_time := current_timestamp;
108-
109- l_reporter.before_asserts_process(self);
110- self.items := ut_assert.get_asserts_results();
111-
112- self.calc_execution_result;
113-
114- for i in 1 .. self.items.count loop
115- l_reporter.on_assert_process(treat(self.items(i) as ut_assert_result));
116- end loop;
117-
118- l_reporter.after_asserts_process(self);
119-
120126 l_reporter.after_test(self);
121127
122128 return l_reporter;
0 commit comments