Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • Please. some people just want to use real OO test suite, not just poor Test::Simple.
    • Then you would want Test::Class.
    • Test::Class is the way to go here. It also integrates with all of the standard Perl testing libraries. It doesn't look like Test::Unit::Lite does that.

      • Standard Perl testing libraries have poor and ugly non-OO API. Theirs tests also don't die after failure which differs from JUnit, PerlUnit, etc.
        • "Standard Perl testing libraries have poor and ugly non-OO API"

          "Standard" perl testing libraries are organisationally agnostic. Which is one of their great advantages. So you can write OO (if you want) with things like Test::Class, or procedurally (if you want) with plain Test::More style, or in a functional style, or... whatever...

          Please go look at Test::Class - which has a very OO API :-)

          "Theirs tests also don't die after failure which differs from JUnit, PerlUnit, etc"

          It does differ from jUnit - not enti

        • Standard Perl testing libraries have poor and ugly non-OO API.

          How does modeling assertEquals as a static method show evidence of good design?

          • Oh, it doesn't :) It's also worth noting that Test::Unit::Lite provides virtually no diagnostic information and forces the programmer to type a heck of a lot more boilerplate with absolutely no benefit whatsoever. And we won't even talk about how incredibly primitive (read: near useless) the assertions are.

            At least with the static methods in jUnit, you don't have to type a bunch of useless $self-> statements or their equivalent (but it also means that there's no real way to track state).

        • If you want your tests to die after failure, use Test::Most.

        • I should also add that if you really want to march to a different drummer and use a piece of software that virtually no one else will touch, that's fine, but at least see if you can submit patches to it so that it can at least output TAP and integrate with standard testing tools.

          • Well, yes. It means that the standard testing tool are really TAP protocol and Test::Harness module, not Test::Simple or Test::More.

            BTW, I'd like to see support for nested tests for TAP protocol, something like:
            1..3
            unit 1..2
            ok PASS unit 1/1
            ok PASS unit 1/2
            unit 1..1
            ok PASS unit 2/1
            unit 1..3
            ok PASS unit 3/1
            not ok Something goes wrong with 3/2
            ok PASS unit 3/3

            It is sad that the JUnit model really can't be implemented with Perl's TAP because TAP protocol

            • Agreed. This is a serious limitation of TAP. If you'd like to push for this, sign up for the TAP IETF mailing list and we can work on getting it done. [oreilly.com]

              On the other hand, the xUnit model which says "die on failure and you have no choice in the matter" doesn't fit well with TAP, either. Tough to assert a leading plan of eight tests when it dies after three and you get a second failure because you didn't complete the plan (unless you artificially fill in a bunch of useless failing tests to pad things out).

            • Why do I always remember new points after I hit submit?

              Actually, if you strictly adopt jUnit, it fits TAP quite nicely. Remember that a given test method containing several asserts is actually a single test. It's different from how Perl looks at things. So let's consider the following test method (I snagged it from a tutorial [clarkware.com]):

              public void testAddItem() {

                  Product book2 = new Product("Pragmatic Project Automation", 29.95);
                  cart.addItem(book2);

                  double expectedBalanc

              • Test::Unit and Test::Unit::Lite currently work like you wrote: single TAP line for single test function. It is somewhat limited.

                I think it would be much useful if TAP had support for nested tests:

                i.e.:

                1..2
                unit 1..0 testAddItem
                unit OK assertEquals(0.0, 0.0)
                unit OK assertEquals(2, 2)
                OK testAddItem
                unit 1..0 testAnotherItem
                unit not OK assertEquals(1, 2)
                # no more assertions in this function
                not OK testAnotherItem

                etc.

                I think I'll join the IETF effort because in my opinion the TAP protocol is t

            • Assertion numbers are like version numbers: they're meaningless except insofar as they're different from each other.