mock System class with powermock

本文介绍如何利用PowerMock框架模拟系统级类的行为。主要包括:在测试类级别使用@RunWith(PowerMockRunner.class)注解;使用@PrepareForTest注解准备测试类;通过mockStatic方法模拟静态方法;在EasyMock中使用PowerMock.replayAll及PowerMock.verifyAll方法。

 

  1. Use the @RunWith(PowerMockRunner.class) annotation at the class-level of the test case.
  2. Use the @PrepareForTest({ClassThatCallsTheSystemClass.class}) annotation at the class-level of the test case.
  3. Use mockStatic(SystemClass.class) to mock the system class then setup the expectations as normally.
  4. EasyMock only: Use PowerMock.replayAll() to change to replay mode.
  5. EasyMock only: Use PowerMock.verifyAll() to change to verify mode.

ref: https://code.google.com/p/powermock/wiki/MockSystem 

在 Java 中对 `System.exit()` 方法进行 mock 可以借助 PowerMock 框架。PowerMock 是一个单元测试模拟框架,它在其他单元测试模拟框架基础上扩展,能通过定制类加载器和字节码篡改技巧,实现对静态方法、构造方法、私有方法以及 Final 方法的模拟支持等强大功能[^4]。 以下是具体步骤: 1. **引入依赖**: ```xml <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>1.7.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>1.7.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.8.5</version> </dependency> ``` 2. **代码示例**: ```java import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static org.junit.Assert.assertEquals; @RunWith(PowerMockRunner.class) @PrepareForTest(System.class) public class TestClass { @Before public void setUp() { PowerMockito.mockStatic(System.class); PowerMockito.doNothing().when(System.class); System.exit(1); } // 假设这是要测试的方法 public static void methodThatCallsSystemExit() { System.exit(1); } @Test public void testMethodThatCallsSystemExit() { methodThatCallsSystemExit(); // 可以添加其他断言来验证方法的其他行为 } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值