EasyMock最终方法– PowerMock,JUnit 4,TestNG
时间:2020-02-23 14:41:17 来源: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(Data.class)"。
这必须在类级别完成,我们可以使用其" fullyQualifiedNames"来指定多个类和包。在测试方法中,使用
PowerMock.createMock()
方法模拟最终类。使用" EasyMock.expect()"方法对行为进行存根。
使用
PowerMock.replay()
完成模拟对象及其行为设置。使用JUnit 4断言测试行为。
使用" PowerMock.verify()"来验证是否调用了所有存根的最终方法。
假设我们的期末程序为:
final class Data { final String reverse(String s) { return new StringBuffer(s).reverse().toString(); } }
这是模拟最终类及其最终方法并对其进行测试的JUnit测试。
package com.theitroad.easymock.powermock.finalmethod; 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.*; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import static org.easymock.EasyMock.anyString; @RunWith(PowerMockRunner.class) @PrepareForTest(Data.class) public class JUnit4PowerMockEasyMockFinalExample { @Test public void test_final_method_class() { //PowerMock.createMock() Data mock = createMock(Data.class); expect(mock.reverse("CAT")).andReturn("TAC"); expect(mock.reverse(anyString())).andReturn("INVALID"); //PowerMock.replay() replay(mock); assertEquals("TAC", mock.reverse("CAT")); assertEquals("INVALID", mock.reverse("Java")); //PowerMock.verify() verify(mock); } }
TestNG PowerMock EasyMock最终方法示例
如果要使用TestNG而不是JUnit-4,请确保您的测试类扩展了PowerMockTestCase类。
同时删除@ RunWith
注解。
对其他注释进行必要的更改,并使用TestNG assert方法。
下面的类使用TestNG和PowerMock来模拟使用EasyMock的最终方法。
package com.theitroad.easymock.powermock.finalmethod; 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; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.anyString; @PrepareForTest(Data1.class) public class TestNGPowerMockEasyMockFinalExample extends PowerMockTestCase{ @Test public void test_final_method_class() { //PowerMock.createMock() Data1 mock = createMock(Data1.class); expect(mock.reverse("CAT")).andReturn("TAC"); expect(mock.reverse(anyString())).andReturn("INVALID"); //PowerMock.replay() replay(mock); assertEquals("TAC", mock.reverse("CAT")); assertEquals("INVALID", mock.reverse("Java")); //PowerMock.verify() verify(mock); } } final class Data1 { final String reverse(String s) { return new StringBuffer(s).reverse().toString(); } }