问题描述
我只是将应用程序代码转换为简单的类,以简洁地表达问题。我们的用例包含一个类,该类在内部使用一些带有静态方法的帮助程序类,需要对它们进行模拟。因此,计划使用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 (将#修改为@)