[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Problem testing certain Thread methods with Test::Unit

Daniel Berger

12/7/2007 5:34:00 PM

Hi all,

Ruby 1.8.6

I'm trying to do write some basic tests for Thread#raise.
Unfortunately, because of the way Test::Unit implements assert_raise
(I think) I can't actually verify that Thread#raise actually works.
For example:

# Assume @thread created in setup
assert_raise(FooError){ @thread.raise(FooError) }

The above test won't work - no error is raised. Any suggestions on how
I should approach this?

Also, if anyone has any idea how to test that threads abort properly
with Thread.abort_on_exception = true, I'm all ears.

Thanks,

Dan


2 Answers

MenTaLguY

12/7/2007 7:35:00 PM

0

On Sat, 8 Dec 2007 02:33:59 +0900, Daniel Berger <djberg96@gmail.com> wrote:
> # Assume @thread created in setup
> assert_raise(FooError){ @thread.raise(FooError) }
>
> The above test won't work - no error is raised. Any suggestions on how
> I should approach this?

This should be reasonably robust:

t = Thread.new { sleep }
Thread.pass until t.status == "sleep"
t.raise FooError
assert_raise(FooError) { t.join }

> Also, if anyone has any idea how to test that threads abort properly
> with Thread.abort_on_exception = true, I'm all ears.

I don't think that's possible without starting a child Ruby process.

-mental


Daniel Berger

12/7/2007 10:21:00 PM

0

On Dec 7, 12:34 pm, MenTaLguY <men...@rydia.net> wrote:
> On Sat, 8 Dec 2007 02:33:59 +0900, Daniel Berger <djber...@gmail.com> wrote:
> > # Assume @thread created in setup
> > assert_raise(FooError){ @thread.raise(FooError) }
>
> > The above test won't work - no error is raised. Any suggestions on how
> > I should approach this?
>
> This should be reasonably robust:
>
> t = Thread.new { sleep }
> Thread.pass until t.status == "sleep"
> t.raise FooError
> assert_raise(FooError) { t.join }

That works nicely, thank you.

> > Also, if anyone has any idea how to test that threads abort properly
> > with Thread.abort_on_exception = true, I'm all ears.
>
> I don't think that's possible without starting a child Ruby process.

If that's what it takes, that's what I'll do. Suggestions?

Thanks,

Dan