EasyMock静态方法– PowerMock,JUnit 4,TestNG
时间:2020-02-23 14:41:18 来源:igfitidea点击:
EasyMock的局限性之一是它无法模拟静态方法。
但是,我们可以使用PowerMock EasyMock扩展来模拟静态方法。
EasyMock静态方法– PowerMock
PowerMock分为多个模块以支持JUnit和TestNG测试框架。
同样,有一些模块可以扩展EasyMock和Mockito模拟框架。
我将提供一个示例,在JUnit 4和TestNG框架上使用PowerMock模拟静态方法。
因此,我们需要导入以下工件。
- powermock模块junit4
- powermock模块测试
- powermock-api-easymock
- junit,testng和easymock的原因很明显。
我没有使用JUnit 5,因为PowerMock还不支持它。
我的示例使用以下版本。
<junit4.version>4.12</junit4.version> <testng.version>6.14.3</testng.version> <powermock.version>2.0.0-beta.5</powermock.version> <java.version>10</java.version> <easymock.version>3.6</easymock.version>
JUnit PowerMock EasyMock静态方法示例
第一步是使用@RunWith(PowerMockRunner.class)批注对测试类进行批注。
下一步是指定准备使用PowerMock进行测试的类,例如@PrepareForTest(Utils.class)。
这必须在类级别完成,我们可以使用其" fullyQualifiedNames"来指定多个类和包。在测试方法中,使用PowerMock.mockStatic()方法模拟类的静态方法。
使用" EasyMock.expect()"方法对行为进行存根。
由于我们没有模拟对象,因此请使用PowerMock.replayAll()完成设置。
使用断言测试行为。
使用" PowerMock.verifyAll()"来验证是否调用了所有存根方法。
假设我们有一个实用程序类:
class Utils { public static long generateID() { return System.currentTimeMillis(); } }
这是模拟静态方法并对其进行测试的JUnit测试。
package com.theitroad.easymock.powermock.staticmethod; import static org.easymock.EasyMock.*; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static org.powermock.api.easymock.PowerMock.*; @RunWith(PowerMockRunner.class) @PrepareForTest(Utils.class) public class JUnit4PowerMockEasyMockStaticExample { @Test public void test_static_method() { //PowerMock.mockStatic() mockStatic(Utils.class); expect(Utils.generateID()).andReturn(1000L); //PowerMock.replayAll() replayAll(); assertEquals(1000L, Utils.generateID()); //PowerMock.verifyAll() verifyAll(); } }
TestNG PowerMock EasyMock静态方法示例
如果要使用TestNG而不是JUnit-4,请确保您的测试类扩展了PowerMockTestCase类。
同时删除@ RunWith
注解。
对其他注释和断言方法进行必要的更改。
下面的类使用TestNG和PowerMock来使用EasyMock模拟静态方法。
package com.theitroad.easymock.powermock.staticmethod; import static org.easymock.EasyMock.*; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockTestCase; import org.testng.annotations.Test; import static org.powermock.api.easymock.PowerMock.*; import static org.testng.Assert.assertEquals; @PrepareForTest(Utils1.class) public class TestNGPowerMockEasyMockStaticExample extends PowerMockTestCase{ @Test public void test_static_method() { //PowerMock.mockStatic() mockStatic(Utils1.class); expect(Utils1.generateID()).andReturn(1000L); //PowerMock.replayAll() replayAll(); assertEquals(1000L, Utils1.generateID()); //PowerMock.verifyAll() verifyAll(); } } class Utils1 { public static long generateID() { return System.currentTimeMillis(); } }