in reply to Using Test::TAP::Model and a global object

I do something similar in the CMS that maintain, I have many tests which require a valid user account - and I create that on demand at the start of the tests.

My solution was to created "user.utils" with content like this:

BEGIN { use_ok( 'Yawns::User'); } require_ok( 'Yawns::User' ); BEGIN { use_ok( 'Yawns::Users'); } require_ok( 'Yawns::Users' ); sub createUser { ... } sub deleteUser { ... }

Then each test which relies upon this:

use Test::More qw( no_plan ); # # Utility functions for creating a new user. # require 'tests/user.utils'; # # Create a random new user. # my ($user, $username, $email, $password ) = setupNewUser(); #

It doesn't solve the problem of repeating code in each test, but it does allow you to put the common code somewhere common even without being able to pass objects around properly.

Steve
--

Replies are listed 'Best First'.
Re^2: Using Test::TAP::Model and a global object
by joewoodhouse30 (Novice) on Oct 16, 2007 at 09:23 UTC
    Hi steve, thanks for your reply

    Not sure if I made this clear, but I need to pass the same object because it contains connections (SSH and LDAP) that I want to re-use without re-connecting in every test script.

      Ahh I guess I wasn't being helpful then.

      I guess a potential fall-back plan would be to created a local singleton module to encapsulate your connection.

      Then each test could do something like:

      my $con = Singleton::Connection->instance();

      and this way only the first connection would connect - the latter calls would return the established object.

      Still just a hack instead of the real ability you want, but it might help.

      Steve
      --