Whitebox
class provides 'newInstance' method to get the instance of a class without
invoking its constructor. This method is very useful, when you class contains
all the private constructors and you want to instantiate for testing.
Following
snippet is used to get the object of the class 'StringUtil', without invoking
its constructor.
StringUtil
stringUtil = (StringUtil) Whitebox.newInstance(StringUtil.class);
Find
the following working application.
StringUtil.java
package com.sample.util; public class StringUtil { private StringUtil() { System.out.println("Hello"); } /** * * @param str * @return true if the string is palindrome, else false. */ public boolean isStringPalindrome(String str) { if (str == null || str.isEmpty()) { return true; } return str.equals(new StringBuilder(str).reverse().toString()); } }
StringUtilTest.java
package com.sample.util; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.lang.reflect.InvocationTargetException; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; @RunWith(PowerMockRunner.class) @PrepareForTest({ StringUtil.class }) public class StringUtilTest { @Test public void isStringPalindrome_empty_true() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { StringUtil stringUtil = (StringUtil) Whitebox.newInstance(StringUtil.class); boolean isPalindrome = stringUtil.isStringPalindrome(""); assertTrue(isPalindrome); } @Test public void isStringPalindrome_Palindrome_true() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { StringUtil stringUtil = (StringUtil) Whitebox.newInstance(StringUtil.class); boolean isPalindrome = stringUtil.isStringPalindrome("madam"); assertTrue(isPalindrome); } @Test public void isStringPalindrome_NotAPalindrome_true() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { StringUtil stringUtil = (StringUtil) Whitebox.newInstance(StringUtil.class); boolean isPalindrome = stringUtil.isStringPalindrome("madama"); assertFalse(isPalindrome); } }
No comments:
Post a Comment