Continue code run after assert exception

A

aidy

I am iterating through a collection and using Test::Unit assertations
on each object

begin
search.each {|@x|
assert($ie.contains_text(@x)) }
rescue => e
puts "#{@x} does not exist in HTML"
end

However, the problem is that if the first assertation is false, an
exception is thrown and my loop terminates. I would like to continue
the loop after an exception is thrown. I have tried 'retry', but I find
myself in an infinite loop.

Thanks

aidy
 
D

dblack

Hi --

I am iterating through a collection and using Test::Unit assertations
on each object

begin
search.each {|@x|
assert($ie.contains_text(@x)) }
rescue => e
puts "#{@x} does not exist in HTML"
end

However, the problem is that if the first assertation is false, an
exception is thrown and my loop terminates. I would like to continue
the loop after an exception is thrown. I have tried 'retry', but I find
myself in an infinite loop.

You can put the begin/rescue/end inside your loop, like this:

[1,2,3].each do |x|
begin
raise unless x == 2
rescue
puts "No! #{x}"
end
end

Also, you might find the asserts_raises method useful. It lets you
predict that something will raise an exception. It probably wouldn't
be a good fit with the loop structure you're using, but you could
isolate some exception-raising tests and test them that way.


David

--
David A. Black | (e-mail address removed)
Author of "Ruby for Rails" [1] | Ruby/Rails training & consultancy [3]
DABlog (DAB's Weblog) [2] | Co-director, Ruby Central, Inc. [4]
[1] http://www.manning.com/black | [3] http://www.rubypowerandlight.com
[2] http://dablog.rubypal.com | [4] http://www.rubycentral.org
 
P

Pit Capitain

aidy said:
I am iterating through a collection and using Test::Unit assertations
on each object

begin
search.each {|@x|
assert($ie.contains_text(@x)) }
rescue => e
puts "#{@x} does not exist in HTML"
end

However, the problem is that if the first assertation is false, an
exception is thrown and my loop terminates. I would like to continue
the loop after an exception is thrown. I have tried 'retry', but I find
myself in an infinite loop.

Aidy, are you using this code in a unit test, or are you using the
assertions as part of your normal code? If this is normal code, see
David's answer how to catch the error inside the loop.

If this is part of a unit test, and you want to report every false
element, take a look at the code in

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/138320

With this module, your test could look like:

class MyTestCase < Test::Unit::TestCase

include ErrorCollector

def test_search_screen
...
collecting_errors do
search.each do |@x|
assert($ie.contains_text(@x), "#{@x} does not exist in HTML")
end
end
end

end

Regards,
Pit
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top