problem in mocking Class.forName

1,400 views
Skip to first unread message

umesh kathiriya

unread,
Jul 8, 2009, 8:56:43 AM7/8/09
to powe...@googlegroups.com
Hi,

I am not able to mock below code,

Can you please help me out.

  mockStatic(Class.class);

  expect(Class.forName("FileTransport").newInstance()).andReturn(fileTransport);

It gives me compilation error like method andReturn<caption-1-of?> in the type IEExpectationSetters<caption-1-of?>  is not applicable  for argument .

Also
 
below expectation compiles but run time it gives ClassNotFoundException.

expect(Class.forName("FileTransport").newInstance()).andThrow(new IllegalAccessException());

java.lang.IllegalStateException: missing behavior definition for the preceeding method call forName("FileTransport")
    at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:30)
    at org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke(EasyMockMethodInvocationControl.java:93)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:68)
    at org.powermock.core.MockGateway.methodCall(MockGateway.java:86)
    at com.apple.ist.kona.fts.repository.TransportTest.testForCreation(TransportTest.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$2.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:222)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$2.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:212)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:205)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:159)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:133)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:131)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:112)
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:44)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)



Pls help me in this.

Thanks,
umesh

Johan Haleby

unread,
Jul 8, 2009, 10:55:16 AM7/8/09
to powe...@googlegroups.com
You're trying to mock two things at the same time. Think of Class.forName("FileTransport").newInstance() as:
Class fileTransportClass = Class.forName("FileTransport");
fileTransportClass.newInstance();
So what are you trying to mock, Class.forName(..) or newInstance()? Also Class is a system class so you need to use this approach to mock static methods in system classes. But I'm not sure why you want to mock Class.forName(..) or newInstance() in the first place, it feels wrong to me.

/Johan
Reply all
Reply to author
Forward
0 new messages