- modify powermock:
Left file: C:\workspace3\powermock\src\org\powermock\core\transformers\impl\MainMockTransformer.java
Right file: C:\workspace3\powermock\powermock-easymock-1.4.8-full\org\powermock\core\transformers\impl\MainMockTransformer.java174,175c174
< //gonro07 Robin add $class
< String code = "Object value = " + MockGateway.class.getName() + ".methodCall(" + classOrInstance + ", $class ,\"" + method.getName()
---
> String code = "Object value = " + MockGateway.class.getName() + ".methodCall(" + classOrInstance + ", \"" + method.getName()
188,189c187,188
< //gonro07 Robin add $class
< String code = "Object value = " + MockGateway.class.getName() + ".methodCall(" + classOrInstance + ", $class, \"" + method.getName()
---
>
> String code = "Object value = " + MockGateway.class.getName() + ".methodCall(" + classOrInstance + ", \"" + method.getName()
Left file: C:\workspace3\powermock\src\org\powermock\core\MockGateway.java
Right file: C:\workspace3\powermock\powermock-easymock-1.4.8-full\org\powermock\core\MockGateway.java
74c74
< private static Object doMethodCall(Object object,Class<?> declaringClz, String methodName, Object[] args, Class<?>[] sig,
---
> private static Object doMethodCall(Object object, String methodName, Object[] args, Class<?>[] sig,
90,91d89
< if(declaringClz!=null && objectType!=declaringClz)
< objectType = declaringClz;
146,150d143
< private static Object doMethodCall(Object object, String methodName, Object[] args, Class<?>[] sig,
< String returnTypeAsString) throws Throwable, NoSuchMethodException {
< return doMethodCall(object,null,methodName,args,sig,returnTypeAsString);
<
< }
188,192c181
< // used for instance methods
< public static synchronized Object methodCall(Object instance, Class<?> declaringClz, String methodName, Object[] args, Class<?>[] sig,
< String returnTypeAsString) throws Throwable {
< return doMethodCall(instance, declaringClz,methodName, args, sig, returnTypeAsString);
< }
---
>
- test cases
package com.ca.child; public class Parent { public int getX(){ return 1; } } |
public class Child extends Parent{ public int getX(){ int x = 1; int z = super.getX(); x = x+ z; return x; } } |
@Test @PrepareForTest(Parent.class) public void testSuper() throws Exception{ final boolean[] invoked = new boolean[]{false}; Method method = Parent.class.getMethod("getX"); MemberModifier.replace(method).with(new InvocationHandler(){ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { invoked[0] = true; return 7; }}); Child x = new Child(); assertEquals(8,x.getX()); assertTrue(invoked[0]); } |