Mock 測試匯出Excel檔案
業務經常涉及到Excel檔案的匯出,後臺給前端提供匯出服務介面,不可能自己都沒測試過,就提供給前端呼叫。最好的方案就是程式設計師編寫單元測試,可以說,程式設計師有責任編寫功能程式碼,同時也就有責任為自己的程式碼編寫單元測試。
單元測試
java 常用的單元測試框架是Junit,利用測試框架可以使我們在編寫測試用例的過程更加便捷優雅。通過測試用例,我們只需要關注:對於特定的輸入,被測物件的返回是否征程,下面是涉及到的相關類。
controller類提供匯出介面
@GET
@Path("/{version}/exportRecordDetail")
@ApiOperation(value = "匯出電子支付結算明細" )
public String exportRecordDetail (@Context HttpServletResponse response, @BeanParam SingleWithdrawReq request){
//...
response.setContentType("application/x-download");
// 獲取模板檔案
String templateFile = "/export/AccountRecordDetail.xlsx";
try (InputStream is = this.getClass().getResourceAsStream(templateFile);
OPCPackage pkg = OPCPackage.open(is);
XSSFWorkbook workbook = new XSSFWorkbook(pkg)) {
outputFile = URLEncoder.encode(outputFile, "UTF-8");
//...
workbook.write(response.getOutputStream());
} catch (IOException | InvalidFormatException e) {
//...
}
return null;
}
核心程式碼: workbook.write(response.getOutputStream()); 這一句是指將檔案寫到輸出流裡,用到了HttpservletResponse 介面,因此在測試用例裡,我們並不能直接例項化HttpservletResponse,因而也就不能作為引數傳遞到controller層。
那怎麼辦呢?首先想到了引入mock方法。Mock的引入,可以幫助我們構建比較難構造的Object,這些Object 通常有很多以來,在單元測試中構造出這些物件通常花費比較大的成本。
Mock 單元測試
@Test
public void exportService() {
SingleWithdrawReq request = new SingleWithdrawReq();
request.setParkId(12345);
ParkingBalanceAccountResources resource = new ParkingBalanceAccountResources();
// Mock HttpServletResponse 例項
HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
// 定義一個輸出的本地檔案
File file = new File("output.xls");
try (ServletOutputStream sos = new MockServletOutputStreamUtil (file)) {
//用MockServletOutputStreamUtil 代替ServletOutputStream
Mockito.when(response.getOutputStream()).thenReturn(sos);
resource.exportRecordDetail(response, request);
}
}
單元測試思路: 將輸出流寫到一個臨時檔案裡,但是在case裡我們如何傳入一個response並且得到輸出流呢?
工具類:構造ServletOutputStream
public class MockServletOutputStreamUtil extends ServletOutputStream {
private FileOutputStream fos; //定義檔案輸出流
public MockServletOutputStreamUtil(File file) {
try {
this.fos = new FileOutputStream(file); // 將輸出流指向檔案
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
}
@Override
public boolean isReady() {
return true;
}
@Override
public void setWriteListener(WriteListener writeListener) {
throw new RuntimeException("do not support this method");
}
@Override
public void write(int b) throws IOException {
fos.write(b);
}
@Override
public void close() {
try {
fos.close();
} catch (IOException e) {
throw new RuntimeE
xception(e);
}
}
相關推薦
Mock 測試匯出Excel檔案
業務經常涉及到Excel檔案的匯出,後臺給前端提供匯出服務介面,不可能自己都沒測試過,就提供給前端呼叫。最好的方案就是程式設計師編寫單元測試,可以說,程式設計師有責任編寫功能程式碼,同時也就有責任為自己的程式碼編寫單元測試。 單元測試 java 常用的單元測
關於NPOI匯出excel檔案(xls和xlsx兩種格式)提示格式不符的問題
這兩天在做匯出excel檔案的時候遇到這個問題 本來我匯出的格式是xlsx格式的,但是下載得到的檔案格式變成了xls, 一開始以為是返回的contenttype設定錯了 return File(ms, "application/vnd.ms-excel", "新車型匯入模板檔案.xls
使用poi匯出excel檔案
一、獲取資料 private List<PmsrT2> getPmsrT2List(HttpServletRequest request) { try { &
dede織夢繫統後臺的文章或自定義模型中的資料庫內容到匯出excel檔案,解決亂碼。
dede織夢繫統後臺的文章或自定義模型中的資料庫內容到匯出excel檔案,解決亂碼。好品牌小編下面分享的開發過程。 1、在後臺目錄建立一個php檔案toexcel.php,在最上面加入程式碼: require_once(dirname(__FILE__).'/confi
ASP.NET mvc匯出Excel檔案
首先要下載 NPOI.dll 引用到專案中 第一步。 第二步控制檯(業務邏輯層) public ActionResult Export(string CustomerName="",int SumbitUser=0,string Level
php利用XLSXWriter 匯出excel檔案
php利用XLSXWriter 匯出excel檔案 // 首先引入XLSXWriter包 include_once("XLSXWriter.php"); $writer = new XLSXWriter(); // 設定表頭 $header = array( 'ID'=>
tp5 PHPExcel下載匯出Excel檔案
1、HTML程式碼 <table class="table table-border table-bordered table-bg"> <thead> &n
匯出pdf檔案、匯出excel檔案和列印
此處所介紹的是利用一些jQuery外掛實現匯出pdf檔案、匯出excel檔案和列印的方法。 1.匯出pdf檔案 (1)需要匯入兩個檔案:jspdf.debug.js,html2canvas.js &nb
Java編寫匯出EXCEL檔案
建立一個service,在dopost方法中寫入如下程式碼: 其中 HSSFCell cell = row.createCell(0) cell.setCellValue("網站名"); 是設定單元格表
js table資料匯出excel檔案
前言 百度了幾篇有關的教程,都差不多甚至可以說是完全相同;在這裡也只是精簡、記錄一下。 程式碼 表格轉換成excel並下載 (document).ready(function () {
java實現匯出EXCEL檔案
/** * 方法:下載差錯明細檔案 作者:王元晨 */ public void DownDlDtlMskFile() { String tpId = DtaInfo.getInstance().getTpId(); CompSDO inputSdo = EPOper.getCom
匯出excel檔案時,出現nginx504錯
匯出excel檔案時,出現nginx504錯 匯出100條,1000條資料時,很順利,但是匯出7000條資料的時候,會有機率出現504 檢查了程式也沒問題,看到提示有nginx,那明顯就是nginx的問題了. 初步判定原因是客服端向伺服器請求的時間過長,所以超過
Highcharts圖表匯出Excel檔案
需要依賴3個js<script src="http://code.highcharts.com/highcharts.js"></script> <script src="http://code.highcharts.com/modules/exporting.js">&l
POST方式匯出Excel檔案
1.方法一: 一般情況下,我們通過ajax獲取資料都是採用get方式獲取,但如果ajax的請求url過長時,get方式由於瀏覽器對url長度不同會導致無法正常獲取資料,尤其是IE。 這時候,我們需要通過post請求的方式獲取資料,而如果我們需要通過post方式匯出Excel表格,則需要通過表
PHP使用PHPExcel匯出excel檔案
PHPExcel下載地址如下:點我即可去下載(地址是gayhub的) 使用到的檔案只有Classes資料夾下的PHPExcel資料夾以及PHPExcel.php檔案 emmmmmmmmmm 這次使用的是PHPExcel類庫,因為在網上找了好久都沒有找到中文文件.
SpringMVC 匯入匯出Excel檔案
/** * 下載Excel模板 建立一個新的檔案用於下載,建立的檔案放在快取中 * * @param request * @param response */ /* * @RequestMapping("/get_Sb_yys_sgyyqk_cj") public void * get_Sb_
PHP快速匯出Excel檔案 (採用xlsx Writer)
<?php include_once("xlsxwriter.class.php"); ini_set('display_errors', 0); ini_set('log_errors', 1); error_reporting(E_ALL & ~E_NOTICE); $f
POI匯出Excel檔案,瀏覽器點選可下載
說明:使用SpringMVC+POI 1:服務端程式碼 /** * 匯出日誌查詢列表 */ @RequestMapping(value = "/log_excel") public void exportLogList(HttpS
利用ajax匯出Excel檔案
記得之前寫過ajax無法彈出儲存下載對話方塊,就直接使用form表單進行提交,下載Excel的。但是如果需要傳遞引數的話,需要使用隱藏空間,有時候還有些麻煩,而使用ajax傳遞引數很方便啊?!於是我們可以通過ajax匯出Excel htm程式碼如下: <button
Java匯出excel檔案簡單實現
慣例: 引用度孃的介紹 Apache POI [1] 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。POI為“Poor Obfuscation