In my project there is requirement where in I need to mock final class.
I am using Test-NG for unit tests.
I tried different things to mock but failed to do so. I also checked different stack overflow posts.
When running testng test case I am getting below error -
java.lang.IllegalArgumentException: Cannot subclass final class class com.AskStateParams
at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
at org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:110)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:110)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60)
In pom.xml am using below dependencies -
<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.8.8</version>
  <optional>true</optional>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-all</artifactId>
  <version>1.9.5</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-mockito-release-full</artifactId>
  <version>1.5.1</version>
  <classifier>full</classifier>
</dependency>
TestNG code is as below -
@RunWith(PowerMockRunner.class)
@PrepareForTest(AskStateParams.class)
public class TestProcessor17100AAskAmount extends AbstractPowerMockProcessorTest {
  @Test
  public void test() {
    AskStateRequestParams  askParams=PowerMockito.mock(AskStateRequestParams.class);
    PowerMockito.when(askParams.getCallerInput()).thenReturn("1000");
    PowerMockito.when(askParams.getResultCode()).thenReturn("Y");
    PowerMockito.when(askParams.getMiString()).thenReturn("P=B");
    Assert.assertEquals(baseProcessor.postProcess(requestContext), "amount");
  }
}
 
    