java – 编写用于下载文件的单元测试
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 编写用于下载文件的单元测试,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4183字,纯文字阅读大概需要6分钟。
内容图文
![java – 编写用于下载文件的单元测试](/upload/InfoBanner/zyjiaocheng/804/fb4cb843659c45a68b75fab404f6f039.jpg)
目前我写了一个小的downloadService,让用户下载一个文件(目前只有excel).代码工作正常,但我不知道如何为它编写单元测试.那是我的代码:
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<UserBillings> userBillings;
public void setBill(List<UserBillings> 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();
}
}
}
单元测试 – 尝试使用Mockito,但得到了例外:
单元测试:
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();
}
}
和例外:
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.<init>(DeflaterOutputStream.java:84)
at java.util.zip.DeflaterOutputStream.<init>(DeflaterOutputStream.java:142)
at java.util.zip.ZipOutputStream.<init>(ZipOutputStream.java:118)
at java.util.zip.ZipOutputStream.<init>(ZipOutputStream.java:104)
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:433)
... 28 more
解决方法:
创建模拟对象时
mockResponse = mock(HttpServletResponse.class);
默认情况下,所有具有引用类型返回类型(减去一些特殊情况)的方法都返回null.
所以getOutputStream()的返回值在这个片段中
ServletOutputStream outputStream = response.getOutputStream();
一片空白.
您需要设置期望并指定返回值.
when(mockResponse.getOutputStream().thenReturn(/* the value to return when that method is invoked */);
这称为stubbing.
内容总结
以上是互联网集市为您收集整理的java – 编写用于下载文件的单元测试全部内容,希望文章能够帮你解决java – 编写用于下载文件的单元测试所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。