title: Write a unit test for downloading a file
body: <p>At the moment I wrote a small downloadService which let's user download a file (at the moment only excel). The code works properly, however I do not know how to write the unit test for it. That's my code:</p>
  
  <pre><code>package com.pzm.service;
  
  import com.pzm.model.UserBillingsMock;
  import com.pzm.model.report.ExcelReport;
  import com.pzm.model.report.Report;
  import com.pzm.model.report.ReportFactory;
  import org.springframework.stereotype.Repository;
  
  import javax.servlet.ServletOutputStream;
  import javax.servlet.http.HttpServletResponse;
  import java.io.IOException;
  import java.util.List;
  
  /**
   * Created by akfaz on 6/26/14.
   */
  
  @Repository
  public class DownloadService {
  
      private Report report;
      private List&lt;UserBillings&gt; userBillings;
  
      public void setBill(List&lt;UserBillings&gt; userBillings) {
          this.userBillings = userBillings;
      }
  
      public void download(HttpServletResponse response, String reportType) {
  
          response.setContentType("application/vnd.ms-excel");
          response.setHeader("Content-Disposition", "attachment; filename=MyExcel.xls");
  
          report = new ReportFactory().create(reportType, userBillings);
          saveFile(response, report);
      }
  
      private void saveFile(HttpServletResponse response, Report report) {
          try {
              ServletOutputStream outputStream = response.getOutputStream();
              report.write(outputStream);
              outputStream.flush();
          } catch (IOException e) {
              e.printStackTrace();
          }
  
      }
  }
  </code></pre>
  
  <p>the unit test - tried to use Mockito, but got the exception:</p>
  
  <p>unit test:</p>
  
  <pre><code>package com.pzm.service;
  
  import junit.framework.TestCase;
  import org.junit.After;
  import org.junit.Before;
  import org.junit.Test;
  
  import javax.servlet.http.HttpServletResponse;
  import static org.mockito.Mockito.*;
  
  /**
   * Created by akfaz on 7/5/14.
   */
  public class DownloadServiceTest extends TestCase{
  
      HttpServletResponse mockResponse;
      DownloadService downloadService;
  
      @Before
      public void setUp() throws Exception {
          mockResponse = mock(HttpServletResponse.class);
          downloadService = new DownloadService();
      }
  
      @Test
      public void testDownload() throws Exception {
          downloadService.download(mockResponse, "xls");
  
          verify(mockResponse).getContentType();
      }
  }
  </code></pre>
  
  <p>and the exception:</p>
  
  <pre><code>org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : null
      at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:500)
      at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1417)
      at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:179)
      at com.pzm.model.report.ExcelReport.write(ExcelReport.java:46)
      at com.pzm.service.DownloadService.saveFile(DownloadService.java:40)
      at com.pzm.service.DownloadService.download(DownloadService.java:34)
      at com.pzm.service.DownloadServiceTest.testDownload(DownloadServiceTest.java:32)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
      at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
      at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202)
      at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
  Caused by: java.lang.NullPointerException
      at java.util.zip.DeflaterOutputStream.&lt;init&gt;(DeflaterOutputStream.java:84)
      at java.util.zip.DeflaterOutputStream.&lt;init&gt;(DeflaterOutputStream.java:142)
      at java.util.zip.ZipOutputStream.&lt;init&gt;(ZipOutputStream.java:118)
      at java.util.zip.ZipOutputStream.&lt;init&gt;(ZipOutputStream.java:104)
      at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:433)
      ... 28 more
  </code></pre>