http://qs1969.pair.com?node_id=485611


in reply to Test::Class and use lib

The docs for Test::Class suggest putting your test modules under t/lib. I understand that this will prevent them from being indexed by PAUSE, which is good. My concern arises over including this directory in my test script, t/main.t (...)
This works fine on my system, but I'm worried that the use lib might break on other OSes, especially with the hardcoded relative path. Is there an accepted standard way of doing this which is better?

Dear friedo

Your attention to portability, as well as desire to properly bundle test code with your distribution, are indeed very good attitudes.

That kind of use lib statements would work only when the testing is done from the build directory, which IMHO is what happens almost all of the time. After all, this is intended to run before the code is installed, so there is no standard place to point to anyway.

That said, I would use the fragment of very untested code below, to construct a hopefully more portable alternative by using File::Spec...

#!/usr/bin/perl # t/main.t -- launch all tests from here use strict; use warnings; use File::Spec; use lib File::Spec::catdir(qw/. t lib/); # The rest of your code goes here...

Note that personally, I consider this a bit of overkill :)

Update: Thanks and ++ to adrianh for pointing out that my overkill was already thought by the authors of lib :)

Best regards

-lem, but some call me fokat

Replies are listed 'Best First'.
Re^2: Test::Class and use lib
by adrianh (Chancellor) on Aug 22, 2005 at 08:29 UTC
    That said, I would use the fragment of very untested code below, to construct a hopefully more portable alternative by using File::Spec...

    You don't need to do this since use lib does it for you :-) From the POD:

    In order to keep lib.pm small and simple, it only works with Unix filepaths. This doesn't mean it only works on Unix, but non-Unix users must first translate their file paths to Unix conventions.