Quale tecnica posso utilizzare per testare il mio codice quando il codice esegue il rendering di un documento PDF non testabile (?)?

-1

Ho bisogno di testare l'output del mio codice prima di inviare l'output per il rendering PDF.

Al momento ho deciso una dichiarazione switch che fa due cose diverse a seconda che sia in produzione o in modalità test.

  1. Renderizza PDF con dati che vanno su PDF in un browser web. Nulla viene restituito al chiamante
  2. Non eseguire il rendering del PDF ma semplicemente restituire i dati per test / altri scopi

Solo per mostrare un codice per chiarire ... Ecco cosa ho ora:

$output = $this->prepOutputData();
switch ($this->strategy)
{
    //outputs binary PDF, no return statement
    case OutlineStrategy::PDF_STRATEGY:
        $pdfEngine = new PdfEngine();

        $em = DoctrineConnector::getEntityManager();
        $metaData = $em->getRepository(PdfMetadata::class)->findAll();

        $pdfEngine->arrangeDataOnPdf($metaData, $output);
        $pdfEngine->printPdfToBrowser();
        break;

    //returns data that goes onto PDF 
    //for testing or for consumption by non-PDF entity
    case OutlineStrategy::TEST_STRATEGY:
        return $output;
        break;
}

Obiettivo

Il mio obiettivo è essere in grado di mostrare PDF in produzione ma NON mostrare PDF per il test e ancora poter eseguire verifiche di verifica sui dati $output . Come posso farlo?

    
posta Dennis 11.12.2015 - 19:41
fonte

2 risposte

1

Ho rimosso i costrutti di strategia (OutlineStrategy :: PDF_STRATEGY, ecc.) dal mio codice. Quindi riscrivo il codice per utilizzare i servizi.

Testerò i servizi e non la generazione di PDF. alias la generazione di PDF non sarà testata, ma i processi che precedono verranno testati.

Per Doc Brown ha scritto una funzione solo per testare l'output.

public function generateOutline($input)
{
    $output = $this->getOutput($input);
    $this->pdfService->renderPdf($output);
}

public function testOutput($input)
{
    return $this->getOutput($input);
}

private function getOutput($input)
{
    $data = $this->inputFilter->getOutlineRequestData($input);
    $output = $this->processor->processInput($data);
    return $output;
}

Notate public/private modificatori

    
risposta data 11.12.2015 - 21:49
fonte
1

Separare getOutput($input) da generateOutline($input) e verificare se getOutput($input) restituisce i risultati corretti è un passo importante.

Se il pdf generato richiede test, puoi provare:

  • Il PDF generato è un PDF valido: tramite strumenti come Apache PDFBox (questo è in Java ma esistono probabilmente equivalenti in PHP) o uno strumento di convalida online.
  • Il PDF generato contiene i dati previsti: utilizzando strumenti come pdf_search , vedi anche link .

Testare automaticamente la parte UX del test del PDF generato è più difficile (non so se esistono strumenti per questi test):

  • Il file PDF è leggibile?
  • Il layout è corretto?
  • È seguita la composizione delle best practice?
risposta data 12.12.2015 - 14:06
fonte

Leggi altre domande sui tag