Как перехватить все вызовы метода класса со шпионским мокитом без учета внутренних делегаций - PullRequest
0 голосов
/ 31 октября 2018

Предполагая, что с таким классом, как:

public class A {
    public void smth {
    }
    public void smth2 {
        smth();
    }
}

Мы отслеживаем это с помощью мокито и делаем простой звонок:

A spiedA = spy(new A());
spiedA.smth2();

После этого, когда мы хотим получить количество вызовов:

Mockito.mockingDetails(spiedA).getInvocations().size()

И он возвращает два вызова, как и ожидалось. Но я хочу регистрировать только внешние звонки без внутренних делегаций. Есть ли возможность добиться требуемого результата? Если бы только Mockito.Invocation мог обеспечить стек вызовов, я бы отфильтровал его.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

ОК, проблема решена. Завернут в java.lang.reflect.Proxy с пользовательским обработчиком вызовов.

0 голосов
/ 31 октября 2018

В классе Invocation есть поле Location location. In фактически имеет трассировку стека внутри (которая на самом деле является приватным полем, поэтому вы должны сделать ее доступной через отражение). И после этого вы можете получить необходимую информацию, что-то вроде этого:

((LocationImpl)((LinkedList<Invocation>) invocations).get(1).getLocation()).stackTraceHolder.stackTrace

Но я бы на самом деле не рекомендовал бы делать это , потому что вы не захотите продолжать этот тест в будущем. Вы можете извлечь smth() в другой класс и следить за ним, если вам действительно нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...