`
jh108020
  • 浏览: 110178 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

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;
	}
}
分享到:
评论

相关推荐

    PowerMock实战手册.pdf

    PowerMock的HelloWorld示例通常会展示如何使用PowerMock创建一个简单的测试用例,比如模拟一个静态方法来获取员工数量,并创建一个员工对象。 #### 重点API解释 - **Mock**:创建一个mock对象,用于模拟方法调用。...

    Easymock mock 异常处理的模拟代码

    此外,Easymock还有其扩展库,如PowerMock,它可以模拟静态方法、构造函数和final类,进一步增强模拟能力。 总之,Easymock在模拟异常处理方面提供了强大的工具,使得开发者能够在单元测试中有效地验证代码的异常...

    UT总结(为完成版)

    **ArgumentsMatcher** 是PowerMock提供的一个强大特性,允许根据传入的参数来决定模拟对象的行为。这在需要根据不同的输入参数返回不同结果的情况下特别有用,例如测试边界条件或者特殊情况。 - **使用场景示例**:...

    easymock2.4.zip

    Easymock 2.4 是一款著名的Java模拟框架,用于单元测试中创建模拟对象,以便在不依赖实际环境的情况下测试代码。Mock对象是软件测试中的一个重要概念,它模仿了真实对象的行为,允许开发者控制其行为以进行特定的...

    springboot + mockito 使用示例代码-原创

    Mockito是一个流行的Java单元测试框架,它允许我们创建和配置模拟对象,以便在测试中隔离我们想要验证的代码部分。结合Spring Boot,我们可以确保我们的应用程序组件在独立环境中运行,不受其他依赖的影响。 首先,...

    mockandroidasynctask:如何在测试过程中模拟Android AsyncTask

    然而,一些开发者可能会避免使用像Mockito或PowerMock这样的模拟库,因为它们可能引入复杂性或导致额外的测试依赖。本篇将详细介绍如何在不依赖外部模拟库的情况下,在测试中模拟Android的AsyncTask。 首先,理解...

    Mock.java.zip

    Mock对象是一种模拟真实对象的行为,使得开发者可以在不依赖实际环境的情况下测试代码。`Mock.java.zip`可能是一个包含关于如何在Java中使用Mock技术的项目或教程压缩包。这个压缩包的名字`Mock.java-idea-01`暗示了...

    Testing

    Mockito则用于模拟对象,以便在孤立环境中测试单个组件。 2. 集成测试(Integration Testing):在单元测试通过后,集成测试关注的是不同模块间的交互。这一步通常用来发现接口之间的问题。Spring Boot框架提供了...

    ecmTest:QA Project X 团队的自动化项目

    Java是一种广泛应用的面向对象编程语言,适合大型企业级应用,且具有丰富的库支持自动化测试,如JUnit、Selenium和TestNG等。 【文件名称列表】 由于提供的文件名称只有一个:“ecmTest-master”,我们可以推测这是...

    XtraVision

    而Mockito或PowerMock可能用于模拟依赖,进行集成测试。 综上所述,XtraVision项目涵盖了Java编程、图形用户界面设计、图像处理、计算机视觉算法等多个方面。为了深入了解和参与此项目,开发者需要扎实的Java基础,...

Global site tag (gtag.js) - Google Analytics