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)文章
Java樹(shù)形結(jié)構(gòu)數(shù)據(jù)生成導(dǎo)出excel文件方法記錄
最近好像得罪了poi,遇到的都是導(dǎo)出word、Excel、pdf的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Java樹(shù)形結(jié)構(gòu)數(shù)據(jù)生成導(dǎo)出excel文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10Java Fluent Mybatis實(shí)戰(zhàn)之構(gòu)建項(xiàng)目與代碼生成篇上
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國(guó)內(nèi)又以Mybatis用的多,基于mybatis上的增強(qiáng)框架,又有mybatis plus和TK mybatis等。今天我們介紹一個(gè)新的mybatis增強(qiáng)框架 fluent mybatis2021-10-10SpringCloud Feign轉(zhuǎn)發(fā)請(qǐng)求頭(防止session失效)的解決方案
這篇文章主要介紹了SpringCloud Feign轉(zhuǎn)發(fā)請(qǐng)求頭(防止session失效)的解決方案,本文給大家分享兩種解決方案供大家參考,感興趣的朋友跟隨小編一起看看吧2020-10-10Eclipse+Java+Swing+Mysql實(shí)現(xiàn)電影購(gòu)票系統(tǒng)(詳細(xì)代碼)
這篇文章主要介紹了Eclipse+Java+Swing+Mysql實(shí)現(xiàn)電影購(gòu)票系統(tǒng)并附詳細(xì)的代碼詳解,需要的小伙伴可以參考一下2022-01-01IDEA生成項(xiàng)目后出現(xiàn)的iml和idea文件問(wèn)題
這篇文章主要介紹了IDEA生成項(xiàng)目后出現(xiàn)的iml和idea文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08