作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为其编写单元测试的方法有一个方法调用,该方法调用引用另一个抽象类中的方法。该方法被递归调用,这在我执行测试用例时给出了堆栈溢出错误。
下面是正在测试的方法
public void configure(Hashtable config) throws PipeBrokenException
{
// Configure the Pipe Element ...
_source = (String) config.get(this.IMAGE_SOURCE);
_destination = (String) config.get(this.IMAGE_DESTINATION);
_printer = (XrayPrinterIf) config.get(this.PRINTER_INTERFACE);
_configProvider = (AutoPrintConfigProvider) config.get(this.AUTOPRINT_CONFIG_PROVIDER);
TraceLogger.getApplicationLogger().info("AutoPrintEndPoint Configure.. useTaskManager = " +useTaskManager);
if(useTaskManager)
{
mgr = new AutoPrintTaskManager(this);
}
super.configure(config);//this method call gives a stack overflow error, when I comment this my test case runs fine.
}
下面是方法调用的定义super.configure(config);
,包含该方法的类是一个抽象类,并且该方法被无限递归地调用,导致出现堆栈溢出错误。
此方法在公共(public)抽象类AnAbstractClass
中定义
public abstract class AnAbstractClass{
public void configure(Hashtable properties) throws PipeBrokenException
{
if( _nextNode != null)
{
_nextNode.configure(properties);
}
}
}
这是我的 JUnit 测试用例,我对此和学习仍然是业余爱好者,请随时纠正我的错误,并希望解决我面临的错误。
@InjectMocks
AutoPrintEndPoint autoPrintEndPoint = PowerMockito.spy(new AutoPrintEndPoint("pipeName")); //AutoPrintEndPoint is the class under test
@Test
public void testConfigureHashtable() throws PipeBrokenException
{
// SmartPipeNode node=Mockito.mock(SmartPipeNode.class,Mockito.CALLS_REAL_METHODS);
AutoPrintConfigProvider autoPrintConfigProvider=Mockito.mock(AutoPrintConfigProvider.class); //AutoPrintConfigProvider is an interface
XrayPrinterIf _printerIf=Mockito.mock(XrayPrinterIf.class);//XrayPrinterIf is an interface
Hashtable config=new Hashtable();
config.put(AutoPrintEndPoint.IMAGE_SOURCE,"Source");
config.put(AutoPrintEndPoint.IMAGE_DESTINATION,"Destination");
config.put(AutoPrintEndPoint.PRINTER_INTERFACE,_printerIf);
config.put(AutoPrintEndPoint.AUTOPRINT_CONFIG_PROVIDER,autoPrintConfigProvider);
autoPrintEndPoint.configure("useTaskManager","yes");
//Mockito.doNothing().when(autoPrintEndPoint).configure(config);
autoPrintEndPoint.configure(config);
String _source=Whitebox.getInternalState(autoPrintEndPoint, "_source");
String _destination=Whitebox.getInternalState(autoPrintEndPoint, "_destination");
System.out.println(_destination+"hello destination");
System.out.println(_source+"here");
}
堆栈跟踪
java.lang.StackOverflowError
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:178)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68)
at java.lang.ClassLoader.loadClass(Unknown Source)
最佳答案
由于您使用的是 PowerMockito,您应该能够通过以下方式抑制对 AnAbstractClass 中方法的任何调用:
PowerMockito.suppress(MemberMatcher.methodsDeclaredIn(AnAbstractClass.class));
关于java - 执行 JUnit 测试用例时出现堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42995442/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!