Как я могу дразнить метод в easymock, который должен возвратить один из его параметров?

public Object doSomething(Object o); который я хочу дразнить. Это должно просто возвратить свой параметр. Я попробовал:

Capture<Object> copyCaptcher = new Capture<Object>();
expect(mock.doSomething(capture(copyCaptcher)))
        .andReturn(copyCatcher.getValue());

но без успеха, я получаю просто AssertionError как java.lang.AssertionError: Nothing captured yet. Какие-либо идеи?

30
задан Jitesh Upadhyay 12 March 2014 в 10:42
поделиться

2 ответа

Я искал такое же поведение и, наконец, написал следующее:

import org.easymock.EasyMock;
import org.easymock.IAnswer;

/**
 * Enable a Captured argument to be answered to an Expectation.
 * For example, the Factory interface defines the following
 * <pre>
 *  CharSequence encode(final CharSequence data);
 * </pre>
 * For test purpose, we don't need to implement this method, thus it should be mocked.
 * <pre>
 * final Factory factory = mocks.createMock("factory", Factory.class);
 * final ArgumentAnswer<CharSequence> parrot = new ArgumentAnswer<CharSequence>();
 * EasyMock.expect(factory.encode(EasyMock.capture(new Capture<CharSequence>()))).andAnswer(parrot).anyTimes();
 * </pre>
 * Created on 22 juin 2010.
 * @author Remi Fouilloux
 *
 */
public class ArgumentAnswer<T> implements IAnswer<T> {

    private final int argumentOffset;

    public ArgumentAnswer() {
        this(0);
    }

    public ArgumentAnswer(int offset) {
        this.argumentOffset = offset;
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public T answer() throws Throwable {
        final Object[] args = EasyMock.getCurrentArguments();
        if (args.length < (argumentOffset + 1)) {
            throw new IllegalArgumentException("There is no argument at offset " + argumentOffset);
        }
        return (T) args[argumentOffset];
    }

}

Я быстро написал «как» в javadoc класса.

Надеюсь, это поможет.

18
ответ дан 27 November 2019 в 23:27
поделиться

Хм, если я правильно понимаю ваш вопрос, я думаю, вы, возможно, слишком усложняете его.

Object someObject = ....;
expect (mock.doSomething (someObject)). AndReturn (someObject);

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

2
ответ дан 27 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: