Subject: Bad test functions in Test::Exception From: Nadim Khemir <[EMAIL PROTECTED]> Date: Tue, 30 Jan 2007 18:17:38 +0100
}I like Test::Exception, it's a very fundamental test module with }Text::NoWarning, Test::Deep and other goodies. Still, I believe some of the }functions made available should not be there at all. Not everyone uses Perl the way you do. Different people have needs for different functions. Saying "I don't use this and can't think of a reason for it, so get rid of it" makes a lot of assumptions, many of which probably aren't true. } # Check that something died } dies_ok { $foo->method1 } 'expecting to die'; } }Am I the only one who got this to pass, to find out later that what cause the }error had nothing to do with the message I displayed. No, you're not - but shunning all possible uses of dies_ok becasue you didn't write a test as complete as you could have isn't the fault of Test::Exception. How about code that dies with an object? dies_ok lets you inspect the object in $@, whereas throws_ok only lets you see if it's part of a class. What if you want to see if $@ meets multiple criteria? There's plenty of valid cases where throws_ok just isn't enough. And finally, what if I truly don't care why something dies, just that it did? Why should I be penalized for writing *any* test? } # Check that something did not die } lives_ok { $foo->method2 } 'expecting to live'; } }Is the above realy a test? Ok but testing what? why wouldn't we wrap all our }test in lives_ok? No, I don't think lives_ok makes any sense. I'd be very }happy to see real examples of lives_ok that add anything to a test suite. I have this in the production code where I work, and it's very necessary. If you have an interface that requires you to die on invalid input, it's a life-saver, especially during debugging. While I won't paste code from my work here, consider your exact case: } # Check that a test runs without an exception } lives_and { is $foo->method, 42 } 'method is 42'; }Isn't this equivalent to is($foo->method, 42 , 'method is 42') ? No! If the latter fails, the test stops where it is, and no further tests proceed. If the former fails, it's another 'nok' to investigate, but the rest of your tests have an opportunity to run. }I postulate that Test::Exception would be even better if we removed the bad }guys. And I postulate that you're not willing to change all the code in the world that uses them, for reasons I've stated above and more. Besides which, if you remove those functions, people will either stop using the module (and possibly stop testing as much) or will invoke the laziness part of Perl and do this: throws_ok { $foo->method } qr//, 'method dies' People have personal and organizational code standards to meet, and that's to be expected. Be sure to update yours to the things you've mentioned. TIMTOWTDI rules here, though, and PBP isn't a rulebook - it's a set of guidelines that work for Damian. Other people use them to varying degrees, and P::C even implements them, but at some point, people are on their own. -Pete K -- Pete Krawczyk perl at bsod dot net