@MockContainer 注解对于继承类的void方法不能正常生效
jixf opened this issue · 0 comments
被mock类:
/**
-
演示使用@MockContainer注解实现Mock容器类的多重继承
-
Demonstrate multiple inherit of mock container class with @MockContainer annotation
*/
public class DemoMultipleInherit {private String prefix() {
return "ori_";
}private String middle() {
return "gin";
}public void ss(){
System.out.println("abd");
}private String suffix(int some, String more, Object[] parameters) {
return "_al";
}public String entry() {
return prefix() + middle() + suffix(0, null, null);
}
}
mock类代码:
/**
-
演示使用@MockContainer注解实现Mock容器类的多重继承
-
Demonstrate multiple inherit of mock container class with @MockContainer annotation
*/
class DemoMultipleInheritTest {private DemoMultipleInherit demoMultipleInherit = new DemoMultipleInherit();
public static class PrefixMock {
@MockInvoke(targetClass = DemoMultipleInherit.class)
private String prefix() {
return "in_";
}
}public static class SuffixMock {
@MockInvoke(targetClass = DemoMultipleInherit.class)
private String suffix(int some, String more, Object[] parameters) {
return "_it";
}@MockInvoke(targetClass = DemoMultipleInherit.class) private void ss(){ System.out.println("aaaddd"); }
}
@MockContainer(inherits = { PrefixMock.class, SuffixMock.class })
public static class Mock {
@MockInvoke(targetClass = DemoMultipleInherit.class)
private String middle() {
return "her";
}
}@test
public void should_use_mock_method_in_parent_class() {
assertEquals("in_her_it", demoMultipleInherit.entry());
demoMultipleInherit.ss();
verifyInvoked("prefix").withTimes(1);
verifyInvoked("middle").withTimes(1);
verifyInvoked("suffix").withTimes(1);
}
}
异常提示:
java.lang.VerifyError: Operand stack underflow
Exception Details:
Location:
com/alibaba/demo/inherit/DemoMultipleInheritTest$Mock.ss(Lcom/alibaba/demo/inherit/DemoMultipleInherit;)V @7: areturn
Reason:
Attempt to pop empty stack.
Current Frame:
bci: @7
flags: { }
locals: { 'com/alibaba/demo/inherit/DemoMultipleInheritTest$Mock', 'com/alibaba/demo/inherit/DemoMultipleInherit' }
stack: { }
Bytecode:
0x0000000: b800 392b b600 3fb0