2016-07-14 17 views
0

Hier ist mein Code und ich möchte wissen, was der beste Weg ist, mit Mockito zu testen, wie ich einige Objekte mit neuen Schlüsselwort erstellen. Kann mir jemand helfen?Test mit Mockito

public static PDDocument generatePDF(final String reportString, final String requestId) throws IOException { 

     final PDDocument document = new PDDocument(); 

     final byte[] byteStr = reportString.getBytes(StandardCharsets.UTF_8); 
     final String str = new String(byteStr, 
       StandardCharsets.UTF_8); 

     final BufferedReader reader = new BufferedReader(new StringReader(str)); 

     try { 

      // PDF box ceremony 

      final TextToPDF textToPdf = new TextToPDF(); 
      textToPdf.setFont(PDType1Font.COURIER); 
      textToPdf.setFontSize(10); 

      textToPdf.createPDFFromText(document, reader); 

      reader.close(); 
     } catch (final IOException ioException) { 
      LOGGER.error("IO Exception while generating PDF for request id " + requestId, ioException.getMessage()); 
      throw ioException; 
     } catch (final Exception e) { 
      LOGGER.error("Exception while generating PDF for request id " + requestId, e.getMessage()); 
      throw e; 
     } finally { 
      reader.close(); 
     } 
     return document; 
} 
+0

Meine Vermutung ist, dass Sie Apache PDF Box verwenden bist du nicht? Ich frage, weil ich keine Referenzen zu anderen Klassen sehe, sondern nur zu Framework-Klassen. –

+0

Ja, ich benutze Apache PDF Box API. – Rakesh

Antwort

0

Mockito soll die Mitarbeiter der zu testenden Klasse/Methode vortäuschen. Beachten Sie, dass es nur verwendet werden sollte, um die Typen vorzutäuschen, die Sie besitzen. In diesem Fall brauchen Sie eigentlich Mockito nicht. Ein Beispiel, ähnlich wie bei Ihnen, in dem Sie Mockito verwenden könnten, ist dies:

class PDFGenerator { 

    private ITextToPdf textToPdf; // This is an hypotetical interface provided by you, for example used as a wrapper to easily change the underling framework 

    public void setTextToPdf(ITextToPdf textToPdf) { 
     this.textToPdf = textToPdf; 
    } 

    public static PDDocument generatePDF(final String reportString, final String requestId) throws IOException { 

     final byte[] byteStr = reportString.getBytes(StandardCharsets.UTF_8); 
     final String str = new String(byteStr, 
      StandardCharsets.UTF_8); 

      final BufferedReader reader = new BufferedReader(new StringReader(str)); 

     try { 

      IDocument document = textToPdf.createPDFFromText(reader); 

      reader.close(); 

      return document; 
     } catch (final IOException ioException) { 
      LOGGER.error("IO Exception while generating PDF for request id " + requestId, ioException.getMessage()); 
      throw ioException; 
     } catch (final Exception e) { 
      LOGGER.error("Exception while generating PDF for request id " + requestId, e.getMessage()); 
      throw e; 
     } finally { 
      reader.close(); 
     } 

    } 
} 

In diesem Fall würde der Test sein:

@Test 
public void testGeneratePdf() throws Exception { 
    ITextToPdf textToPdfMock Mockito.mock(ITextToPdf.class); 
    PDFGenerator pdfGenerator = new PDFGenerator(); 
    pdfGenerator.setTextToPdf(textToPdfMock); 

    Mockito.when(textToPdfMock.createPDFFromText(Mockito.any())).thenReturn(something); 
    IDocument generatedDocument = pdfGenerator.generatePDF(createReportString(), "TestId"); 

    Mockito.verify(textToPdfMock, Mockito.times(1)).createPDFFromText(Mockito.any()); 
    Mockito.verifyNoMoreInteractions(textToPdfMock); 
    // Do also some standard junit asserts on the generatedDocument 
} 
+0

Vielen Dank. Ja, ich stimme zu, da es eine API von Drittanbietern ist, Mockito wird nicht benötigt. Ich werde das Beispiel versuchen, das Sie gegeben haben. Danke – Rakesh