At Sun, 28 Apr 2002 01:06:18 -0700,
chromatic wrote:

> I've written a module to make it easier to do very strict unit testing.  It
> lets you fake an existing interface somewhat more easily.  For example, if
> you're testing a web app, you can mock up CGI.pm instead of having to specify
> query information manually.

Seems interesting. But I prefer a direct way to define Mock classes
manually in a test code like:

  package Mock::CGI;
  sub param {
      my($self, $name) = @_;
      return $self->{$name};
  }

  package main;
  my $q = bless {}, 'Mock::CGI';
  my $app = WebApp->new($q);
  $app->run;

It's not so irresistable to me. And doing so gives me a flexibility.
Well I believe you'll convert me with your future article (on
perl.com?) ;)

Here's a patch 

* pass tests in 5.005_03
* can() should return subref instead of just 1


-- 
Tatsuhiko Miyagawa <[EMAIL PROTECTED]>


diff -ruN Test-MockObject-0.03/lib/Test/MockObject.pm 
Test-MockObject-0.03.patch/lib/Test/MockObject.pm
--- Test-MockObject-0.03/lib/Test/MockObject.pm Sun Apr 28 17:46:24 2002
+++ Test-MockObject-0.03.patch/lib/Test/MockObject.pm   Sun Apr 28 17:47:02 2002
@@ -15,6 +15,7 @@
 
 sub add {
        my ($self, $name, $sub) = @_;
+       $sub ||= sub {};
        $self->{_subs}{$name} = $sub;
 }
 
@@ -47,7 +48,7 @@
        my ($self, $sub) = @_;
 
        # mockmethods are special cases, class methods are handled directly
-       return 1 if (ref $self and exists $self->{_subs}{$sub});
+       return $self->{_subs}{$sub} if (ref $self and exists $self->{_subs}{$sub});
        return UNIVERSAL::can(@_);
 }
 
@@ -103,7 +104,7 @@
        return if $sub eq 'DESTROY';
 
        if (exists $self->{_subs}{$sub}) {
-               push @{ $self->{_calls} }, [ $sub, \@_ ];
+               push @{ $self->{_calls} }, [ $sub, [ @_ ] ];
                goto &{ $self->{_subs}{$sub} };
        }
        return;
diff -ruN Test-MockObject-0.03/t/base.t Test-MockObject-0.03.patch/t/base.t
--- Test-MockObject-0.03/t/base.t       Sun Apr 28 16:50:14 2002
+++ Test-MockObject-0.03.patch/t/base.t Sun Apr 28 17:43:28 2002
@@ -74,7 +74,7 @@
 
 can_ok( 'Test::MockObject', 'call_pos' );
 $mock->foo(1, 2, 3);
-$mock->bar([ foo ]);
+$mock->bar([ 'foo' ]);
 $mock->baz($mock, 88);
 is( $mock->call_pos(1), 'foo', 
        'call_pos() should report name of sub called by position' );

Reply via email to