[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Test::Unit -- multiple errors in test method ???

Johan Holmberg

9/15/2003 12:08:00 PM

8 Answers

David Corbin

9/15/2003 12:16:00 PM

0

On Monday 15 September 2003 08:08, Johan Holmberg wrote:
> Hi !
>
> I have been writing some unit tests with Test::Unit.
> The two last assertions aren''t even executed.
> Is this a but or an intentional "feature" ?

"feature"

>
> I''ve looked at the way JUNIT in Java does the same thing,
> and there I got *all* errors reported. That seems much more useful
> to mee.

You''d better look more closely. JUnit stops execution of the test at the
first failed assertion. Of course, it doesn''t report how many assertions
it''s making, so maybe it''s less obvious to you.

>
> With the current Test::Unit behaviour in Ruby, I can''t know if
> an error "hides" a number of other errors until I''ve fixed the first
> error (it feels like having a C-compiler that only report the first
> compilation error ...).
>

If you''ve got a number of assertions in one test case, while not always, often
they are "ascendent". That is, the second asssertion can only really be
checked. if the first one is true. For example, so people might right

assert_not_nil(a)
assert_equals("foo",a.name)


>
> /Johan Holmberg

--
David Corbin <dcorbin@machturtle.com>


Johan Holmberg

9/15/2003 12:45:00 PM

0

Simon Strandgaard

9/15/2003 1:06:00 PM

0

On Mon, 15 Sep 2003 22:08:22 +0900, Johan Holmberg wrote:

> I have been writing some unit tests with Test::Unit.
>
> I''ve noted that when an assertion fails in a test method, the
> remaining assertions in the same test method aren''t even excuted.
> Here is an example:


It is considered good practize only to *one* assertion per testcase, this
way you won''t have any assertions which never gets executed.

Even though I doesn''t always follow that convention :-)

--
Simon Strandgaard


ts

9/15/2003 1:06:00 PM

0

>>>>> "J" == Johan Holmberg <holmberg@iar.se> writes:

J> - I have tried to write some table driven tests. How should I do
J> this ? Currently I tried something in the following style:

Something like this ?

svg% cat b.rb
#!/usr/bin/ruby
require ''test/unit''

class TC_example < Test::Unit::TestCase

@@data = [
[2, 1, 1, true],
[5, 2, 2, false], # should fail
[7, 2, 5, true],
[8, 3, nil, TypeError], # should fail
]

def test_a
for facit, aa, bb, res in @@data
case res
when true
assert_equal(facit, aa + bb)
when false
assert_not_same(facit, aa + bb)
else
assert_raises(res) { aa + bb }
end
end
end
end

svg%

svg% b.rb
Loaded suite ./b
Started

Robert Klemme

9/15/2003 1:08:00 PM

0


"Simon Strandgaard" <qj5nd7l02@sneakemail.com> schrieb im Newsbeitrag
news:pan.2003.09.15.13.05.42.438830@sneakemail.com...
> On Mon, 15 Sep 2003 22:08:22 +0900, Johan Holmberg wrote:
>
> > I have been writing some unit tests with Test::Unit.
> >
> > I''ve noted that when an assertion fails in a test method, the
> > remaining assertions in the same test method aren''t even excuted.
> > Here is an example:
>
>
> It is considered good practize only to *one* assertion per testcase,
this
> way you won''t have any assertions which never gets executed.

Did you mean to say "*one* assertion per test" (i.e. test method)? One
assertion per test case (i.e. class) would be a bit lavish...

But even if so: JUnit encourages the convention of one test per method,
which typically leads to multiple assertions per test.

> Even though I doesn''t always follow that convention :-)

Same here.

Regards

robert

Johan Holmberg

9/15/2003 1:26:00 PM

0

ts

9/15/2003 1:41:00 PM

0

>>>>> "J" == Johan Holmberg <holmberg@iar.se> writes:

J> No, not really.
J> When I wrote "should fail" I just meant that I had written a line in
J> the table that *as it stands* give an error.

Then this ?

svg% cat b.rb
#!/usr/bin/ruby
require ''test/unit''

class TC_example < Test::Unit::TestCase

@@data = [
[2, 1, 1],
[5, 2, 2], # should fail
[7, 2, 5],
[8, 3, 7], # should fail
]

def test_a
error = []
for facit, aa, bb in @@data
begin
assert_equal(facit, aa + bb)
rescue Exception
error << $!
end
end
error.each {|e| add_failure(e.message, e.backtrace) }
end
end

svg%

svg% b.rb
Loaded suite ./b
Started
FF
Finished in 0.002194 seconds.

1) Failure!!!
test_a(TC_example) [./b.rb:17]:
<5> expected but was
<4>

2) Failure!!!
test_a(TC_example) [./b.rb:17]:
<8> expected but was
<10>

1 tests, 4 assertions, 2 failures, 0 errors
svg%


Guy Decoux


Johan Holmberg

9/15/2003 2:09:00 PM

0