In
this post, I am going to explain how to mock private static void methods. PowerMock
provides 'expectPrivate' method to specify expectations on private
methods using the method name.
Example
String
message = "Enter Your Name";
String
methodToMock = "readInputFromUI";
PowerMock.mockStaticPartial(InputUtil.class,
methodToMock);
PowerMock.expectPrivate(InputUtil.class,
methodToMock, message.toUpperCase()).times(5);
Above
statement mock the private method 'readInputFromUI' and expect argument as
"ENTER YOUR NAME" (in upper case).
Following
is the complete working application.
InputUtil.java
package com.sample.tests; import javax.swing.JOptionPane; public class InputUtil { public static void readInput(String message){ readInputFromUI(message.toUpperCase()); } private static void readInputFromUI(String message){ JOptionPane.showInputDialog(message); } }
InputUtilTest.java
package com.sample.tests; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest({ InputUtil.class }) public class InputUtilTest { @Test public void mockVoidEvenMethod() throws Exception { String message = "Enter Your Name"; String methodToMock = "readInputFromUI"; PowerMock.mockStaticPartial(InputUtil.class, methodToMock); PowerMock.expectPrivate(InputUtil.class, methodToMock, message.toUpperCase()).times(5); PowerMock.replayAll(); for (int i = 0; i < 5; i++) { InputUtil.readInput(message); } PowerMock.verifyAll(); } }
No comments:
Post a Comment