Как делает “статическое отражение”, работают в Java? (напр. в mockito или easymock)

Я только что понял, как это сделать! Я собираюсь опубликовать здесь то, что я сделал, поэтому, может быть, это будет полезно для некоторых людей:

Это просто, если вызвать его с помощью переменной.

Код кнопки:

var button = Ext.create('Ext.Button', {
    text     : 'Button',
    renderTo : Ext.getBody(),
    listeners: {
        click: function() {
            // this == the button, as we are in the local scope
            this.setText('I was clicked!');
        },
        mouseover: function() {
            // set a new config which says we moused over, if not already set
            if (!this.mousedOver) {
                this.mousedOver = true;
                alert('You moused over a button!\n\nI wont do this again.');
            }
        }
    }
});

В своем окне просмотра вам просто нужно добавить его как элемент:

...
items: [
  {
    items: button //button is the variable that we defined when we created the button
  }
]
...

Окончательный результат:

[ 113] enter image description here

Я надеюсь, что это поможет кому-то, у кого тот же вопрос, что и у меня:)

5
задан Romain Verdier 9 March 2009 в 13:55
поделиться

4 ответа

Дразнящие библиотеки обычно не работают с деревьями выражений. Они создают тип, который реализует соответствующий интерфейс и отвечает на вызовы метода или путем записи их или проверки их и возврата предварительно запрограммированных ответов. Это обычно делается с любым прокси (например, RealProxy в.NET, Прокси в Java) или с динамической генерацией кода.

В случае EasyMock это использует Proxy (для интерфейсов, так или иначе), как Вы видите в исходном коде: посмотрите на org.easymock.internal.JavaProxyFactory.

5
ответ дан 13 December 2019 в 05:43
поделиться

Библиотеки насмешки Java обычно работают как это:

При создании насмешки фактический прокси создается (быть этим от интерфейса или подкласса), экземпляр находится в "режиме записи". Это означает, что любой последующий вызов зарегистрирован (имя метода, параметры, возвратитесь ожидаемый). Заметьте, что прокси в режиме записи действительно на самом деле только записывает вызовы. Нет никакого отражения, серовато-синего включено. Никакое исследование метаданных, и т.д. Конечно, эти библиотеки делают некоторые приемы (такие как хранение вызовов в локальной переменной потока для обработки методов, которые возвращаются пусто), но идея остается тем же.

Затем когда "режим воспроизведения" запускается, ложный экземпляр просто проверяет ожидания из списка вызовов (method+parameters и возвращаемые значения).

4
ответ дан 13 December 2019 в 05:43
поделиться

Я никогда не работал с mockito или easymock, но я не думаю, что вызов делает то, что Вы думаете, что он делает. Это не интерпретирует mockedList.get(0) любым специальным способом. Метод get выполняется на mockedList возражайте обычно, и результат этого вручен к when.

2
ответ дан 13 December 2019 в 05:43
поделиться

mockedList.get(0) синтаксис для вызова метода и делает точно это. То, что делает тот метод, не точно ясно. mockedListтип выполнения будет подклассом LinkedList возвращенный mock метод, который может быть реализован, как когда-либо платформа насмешки считает целесообразным.

1
ответ дан 13 December 2019 в 05:43
поделиться