lundi 4 avril 2016

Unit testing in perl, Receiving hash ref as return expected to return a string from a key in a hash

I am trying to test the output of the following method:

package ASC::Builder::Error;

sub new {

    my ($package, $first_param) = (shift, shift);


    if (ref $first_param eq 'HASH') {
        my %params = @_;
        return bless { message => $first_param->{message}, %params}, $package;
    }
    else {
        my %params = @_; 
        return bless {message => $first_param, %params}, $package;

}   
}

This method is supposed to accept either an error hash or error string. If it accepts a hash it should output the value of the message key from the error hash.

This is the error hash located in ErrorLibrary.pm:

 use constant {

        CABLING_ERROR => {
        errorCode => 561,
        message => "cabling is not correct at T1",
        tt => { template => 'disabled'},
        fatal => 1,
        link =>'http://ift.tt/231CJxl',
        },
    };

This is the message method along with the other keys of the hash located in Error.pm

    package ASC::Builder::Error;

    sub message {
        return $_[0]->{message}; 
    }

sub tt {
    return {$_[0]->{tt} };
}

sub code {
    return {$_[0]->{code} };
}

This is my current unit test located in error.t

#input value will either be a String or and Error Message Hash


# error hash
my $error_hash = CABLING_CHECK_TOR_INCORRECT_CABLING_ERROR;
# error string
my $error_string = "cabling is not correct at T1.";

# error hash is passed into new and an error object is outputted
my $error_in = ASC::Builder::Error->new($error_hash);

# checks to see if the output object from new is an Error object
isa_ok($error_in, 'ASC::Builder::Error');

# checking that object can call the message() method
can_ok( $error_in, 'message');


# checks to see if the output message matches the message contained in the error hash(correct)
is($error_in->message(),( $error_string || $error_hash->{message} ), 'Returns correct error message');

And finally the results of my test:

#   Failed test 'Returns correct error message'
#   at t/67_error_post.t line 104.
#          got: 'HASH(0x38b393d490)'
#     expected: 'cabling is not correct at T1.'
# 
# '
# Looks like you failed 1 test of 3.
t/67_error_post.t .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/3 subtests 

Aucun commentaire:

Enregistrer un commentaire