Questa è la prima domanda in Stack Overflow. Mi scuso in anticipo se sto violando alcune regole.Test del modulo Perl con Test :: Altro (Perl intermedio, capitolo 14)
Ho letto il capitolo 14 di Intermediate Perl, 2 ° ed., Che tratta i moduli Perl di test e utilizza le funzionalità di Test :: Altro. Mi riferisco al codice pubblicato direttamente in questo libro nella sezione intitolata "Aggiungere i nostri primi test".
Per alcuni sfondi, in questo capitolo viene creata una classe campione Animal
in un modulo con lo stesso nome. Questa classe ha un metodo semplice speak
che assomiglia a questo:
sub speak {
my $class = shift;
print "a $class goes ", $class->sound, "!\n";
}
Il metodo sound
è una semplice stringa restituita per un animale particolare, quindi, ad esempio, il metodo di un cavallo sound
sarà semplicemente sub sound { "neigh" }
ed è speak
metodo dovrebbe uscita il seguente:
A Horse goes neigh!
il problema che sto funzionando in è il seguente: nel codice di test che ho creato in ./Animal/t/Animal.t, io sono incaricato di utilizzare i blocchi nude e Test::More::is
a prova che il speak
metodo funziona. Il codice è simile al seguente nel file di test:
[test code snip]
{
package Foofle;
use parent qw(Animal);
sub sound { 'foof' }
is(Foofle->speak,
"A Foofle goes foof!\n",
"An Animal subclass does the right thing"
);
}
Il test ha esito negativo. Ho eseguito tutti i comandi di compilazione, ma durante l'esecuzione di "test build", ottengo questo fallimento per il test sugli animali:
Undefined subroutine &Foofle::is called at t/Animal.t line 28.
Quando provo utilizzare in modo esplicito Test::More::is
invece di semplicemente is
, il test fallisce ancora con la seguente messaggio:
# Failed test 'An Animal subclass does the right thing'
# at t/Animal.t line 28.
# got: '1'
# expected: 'A Foofle goes foof!
# '
I miei metodi sembrano definiti esattamente come ho spiegato. Penso che il primo errore sia un problema di ambito a causa dei blocchi nudi, ma non sicuro al 100%. Il secondo errore non sono sicuro, perché se dovessi creare una classe come figlio di Animal
e chiamato speak
su di esso, non otterrei una risposta 1, ma piuttosto l'output atteso.
Qualcuno sarebbe in grado di dare una mano su quello che potrei fare di sbagliato? Per versioni software forse rilevanti, sto usando perl v5.16, Test :: Altro v0.98 e Module :: Starter v1.58.
una domanda fine, ben formata e contenente dettagli appropriati. benvenuti a SO –