1. 程式人生 > >Mock 測試匯出Excel檔案

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)

&lt;?php include_once("xlsxwriter.class.php"); ini_set('display_errors', 0); ini_set('log_errors', 1); error_reporting(E_ALL &amp; ~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