PowerMock应用二:模拟new对象

来个简单的

@RunWith(PowerMockRunner.class)
@PrepareForTest(MockFile.class)
public class MockFile {
@Test
public void testRegisterService2() throws Exception {
String s="F:/aa.txt";
File file=PowerMockito.mock(File.class);
// PowerMockito.whenNew(File.class).withArguments(s).thenReturn(file);
PowerMockito.whenNew(File.class).withArguments(Mockito.anyString()).thenReturn(file);
PowerMockito.when(file.exists()).thenReturn(true);
File a=new File(s);
Assert.assertEquals(true, a.exists());
}
}



再来个复杂的,模拟数据流

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
// 注意这里,这个是new FileInputStream所在的类
@PrepareForTest({ AA.class })
public class MockWhenNew {
@Test
public void test() throws Exception {
// 模拟数据流
File file = PowerMockito.mock(File.class);

FileInputStream is = PowerMockito.mock(FileInputStream.class);
PowerMockito.whenNew(FileInputStream.class).withArguments(file).thenReturn(is);

InputStreamReader ir = new InputStreamReader(new ByteArrayInputStream("123".getBytes()));
PowerMockito.whenNew(InputStreamReader.class).withArguments(Mockito.any(FileInputStream.class)).thenReturn(ir);

AA spy = new AA();
Assert.assertEquals("123", spy.aa(file));
}
}

class AA {
public String aa(File file) throws Exception {
FileInputStream in = new FileInputStream(file);
InputStreamReader is = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(is);
String line = "", s = "";
while ((line = reader.readLine()) != null) {
s += line;
}
return s;
}
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值