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();
}
}

