PowerMockito无法创建具有匿名块的类的实例

问题描述

我只是将应用程序代码转换为简单的类,以简洁地表达问题。我们的用例包含一个类,该类在内部使用一些带有静态方法的帮助程序类,需要对它们进行模拟。因此,计划使用powermockito。这部分没有问题,但是,我们有一个类,其中一个方法中有一个匿名块。当我们尝试创建此类的实例时,powermockito失败,出现非常模糊的错误。尝试花几个小时解决问题,但没有任何运气。

public abstract class AbstractClass {

    public abstract void methodone(String arg);

    public void methodTwo()
    {
        System.out.println("In method two");
    }
}

public class Staticmethod {

    public static String someStaticmethod()
    {
        System.out.println("in static method");
        return "static";

    }
}

public class AbstractClassCaller {

    public AbstractClassCaller()
    {
        Staticmethod.someStaticmethod();
        // The following piece of code is the problematic block
        AbstractClass abstractClassInstance = new AbstractClass(){
            public void methodone(String methodArg)
            {
                System.out.println("In Method One");

            }
        };

    }
}

@Test
@PrepareForTest({AbstractClassCaller.class,Staticmethod.class})
public class AbstractClassCallerTest {

    @Test
    public void test() throws Exception
    {
        powermockito.mockStatic(Staticmethod.class);
        powermockito.when(Staticmethod.someStaticmethod()).thenReturn(
                "PowerStatic");
        // This is the code which triggers the exception
        AbstractClassCaller instance = new AbstractClassCaller();

    }

    @ObjectFactory
    public IObjectFactory getobjectFactory() {
        return new org.powermock.modules.testng.PowerMockObjectFactory();
    }
}

以上junit类失败,但出现以下异常:

org.powermock.reflect.exceptions.ConstructorNotFoundException: Failed to lookup constructor with parameter types [ com.oracle.oal.seaas.AbstractClassCaller ] in class com.oracle.oal.seaas.AbstractClassCaller$1.
    at com.oracle.oal.seaas.AbstractClassCallerTest.test(AbstractClassCallerTest.java:21)
Caused by: java.lang.NoSuchMethodException: com.oracle.oal.seaas.AbstractClassCaller$1.<init>(com.oracle.oal.seaas.AbstractClassCaller)
    at com.oracle.oal.seaas.AbstractClassCallerTest.test(AbstractClassCallerTest.java:21)

/// AbstractClassCaller中的以下匿名块引起了该问题:

AbstractClass abstractClassInstance = new AbstractClass(){
            public void methodone(String methodArg)
            {
                System.out.println("In Method One");

            }
        };

关于如何解决此问题的任何想法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)