Java如何Mock FileInputStream問(wèn)題
Java如何Mock FileInputStream
1. 最近在寫UT(單元測(cè)試) 的過(guò)程
遇到需要 Mock 出 FileInputStream 的情況,在這里分享一下自己的解決方案。
需要 Mock 的類:
public class Class1 {
public Class1() { }
public boolean method1() {
try {
FileInputStream fileInputStream = new FileInputStream("file.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
return true;
}
}2. 測(cè)試類如下
@RunWith(PowerMockRunner.class)
@PrepareForTest(Class1.class)
public class Class1Test {
@Test
public void method1Test() throws Exception {
Class1 class1 = new Class1();
FileInputStream fileInputStreamMock = mock(FileInputStream.class);
whenNew(FileInputStream.class).withAnyArguments().thenReturn(fileInputStreamMock);
boolean expected = true;
boolean actual = class1.method1();
assertEquals(expected, actual);
}
}注意:
在單元測(cè)試中我使用了 @PrepareForTest(Class1.class),而沒(méi)有使用 @PrepareForTest(FileInputStream.class)
3. 如果需要實(shí)際讀取一個(gè)文件時(shí)
例如要讀取 resources 目錄下的某個(gè)文件,可以將代碼修改為如下所示:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Class1.class)
public class Class1Test {
@Test
public void method1Test() throws Exception {
Class1 class1 = new Class1();
String path = new File(getClass().getClassLoader().getResource("file.txt").getFile()).getCanonicalPath();
FileInputStream fileInputStream = new FileInputStream(path);
whenNew(FileInputStream.class).withAnyArguments().thenReturn(fileInputStreamMock);
boolean expected = true;
boolean actual = class1.method1();
assertEquals(expected, actual);
}
}PS:補(bǔ)充一下自己的pom依賴
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
</dependencies>Java mockito mock InputStream
方案
使用apache commons的IOUtils直接構(gòu)造一個(gè)基于String的InputStream,一些文本傳輸相關(guān)的測(cè)試的場(chǎng)景里非常實(shí)用。
Process mockProcess = mock(Process.class);
InputStream errorStream = org.apache.commons.io.IOUtils.toInputStream("error message", "UTF-8");
when(mockProcess.getErrorStream()).thenReturn(errorStream);總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot注冊(cè)攔截器所遇到的問(wèn)題
這篇文章主要介紹了springboot注冊(cè)攔截器的方法及所遇到的問(wèn)題,需要的朋友可以參考下2018-07-07
SpringBoot中@RestControllerAdvice注解實(shí)現(xiàn)全局異常處理類
這篇文章主要介紹了SpringBoot中@RestControllerAdvice注解全局異常處理類,springboot中使用@RestControllerAdvice注解,完成優(yōu)雅的全局異常處理類,可以針對(duì)所有異常類型先進(jìn)行通用處理后再對(duì)特定異常類型進(jìn)行不同的處理操作,需要的朋友可以參考下2024-01-01
Springboot中設(shè)置時(shí)間格式問(wèn)題小結(jié)
本文主要介紹了Springboot中設(shè)置時(shí)間格式問(wèn)題小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
Java單例模式實(shí)現(xiàn)靜態(tài)內(nèi)部類方法示例
這篇文章主要介紹了Java單例模式實(shí)現(xiàn)靜態(tài)內(nèi)部類方法示例,涉及構(gòu)造函數(shù)私有化等相關(guān)內(nèi)容,需要的朋友可以了解下。2017-09-09
SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

