代码之家  ›  专栏  ›  技术社区  ›  John Lippson

Doanswer检查哪个类调用了特定的函数?

  •  1
  • John Lippson  · 技术社区  · 7 年前

    当只从一个特定的类中调用一个方法时,我正试图模拟它,因为底层框架多次调用我的模拟方法。

    有没有一种方法来描述一个特定的模拟方法的调用程序,以便我可以根据调用程序有条件地返回数据?

    我正在使用mockito和doanswer API

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ryuzaki L    7 年前

    如果您正在寻找方法的调用层次结构,这将是一个完美的答案。

    StackTraceElement[] cause = Thread.currentThread().getStackTrace();
    

    从这个数组中,您可以获取所有层次结构类名,这样您就可以签入这个数组,哪个类调用了这个方法。

        2
  •  1
  •   Phil Ninan    7 年前

    我认为你应该能返回一个自定义答案。使用此API,您可以访问模拟调用。您可以使用死池的答案,并且应该能够根据调用方有条件地返回某些内容。救命啊!

        Mockito.doAnswer(new Answer<Object>() {
    
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                // TODO Auto-generated method stub
                // do something with the stack trace
                StackTraceElement[] cause = Thread.currentThread().getStackTrace();
                return somthing;
            }
    
        }).when(service).doSomething();
    

    https://static.javadoc.io/org.mockito/mockito-core/1.10.19/org/mockito/invocation/InvocationOnMock.html

    这个问题可能有助于: How do I find the caller of a method using stacktrace or reflection?