alibaba/testable-mock

@MockContainer 注解对于继承类的void方法不能正常生效

jixf opened this issue · 0 comments

jixf commented

被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