EasyMock: предоставление неизвестных аргументов во время компиляции

Используя последнюю версию EasyMock, у меня есть метод, который мне нужно заглушить. Метод принимает параметр объекта и возвращает значение void.

Заглушенный метод вызывается методом, который я тестирую. Никаких сюрпризов. Моя трудность заключается в том, что объект, который предоставляется в качестве аргумента издевательскому методу, создается методом, который я тестирую.

Я знаю, что могу обойти это, используя createNiceMock(), но есть ли способ явно заглушить этот метод?

Образец кода:

public interface IMockMe { 
    void doSomething(InnerObj obj);
}

public class TestMe {
    IMockMe mockMe; 

    public void testThisMethod() {
        InnerObj obj = new InnerObj();
        mockMe.doSomething(obj);
    }
}

class Tester {
    @Test
    public void testThatDarnedMethod() {
        IMockMe mocked = EasyMock.create(IMockMe.class);

        mocked.doSomething( /* what goes here? */);
        EasyMock.expectLastCall();

        TestMe testMe = new TestMe(mocked);
        testMe.testThisMethod();

    }
}

person roufamatic    schedule 27.01.2010    source источник


Ответы (1)


Ознакомьтесь с разделом «Гибкие ожидания с сопоставлением аргументов» в документации EasyMock. Образец из документации:

String[] documents = new String[] { "Document 1", "Document 2" };
expect(mock.voteForRemovals(aryEq(documents))).andReturn(42);

aryEq(documents) — это вызов, который создает сопоставитель, который будет сопоставлять любой массив с правильным содержимым, а не сопоставлять по идентификатору.

В вашем случае вам может понадобиться сопоставитель anyObject().

person Jon Skeet    schedule 27.01.2010
comment
Неработающей ссылке. См.: easymock.org/user-guide.html#verification-expectations. - person aglassman; 17.09.2014
comment
было бы здорово добавить пример кода вместо ссылки на сайт - person Jess Bowers; 11.12.2014
comment
@JessBowers: скопировал пример из документации и немного объяснил. - person Jon Skeet; 11.12.2014
comment
Что делать, если у вас есть метод void и, следовательно, нет expect() ? - person Pieter De Bie; 10.06.2015
comment
@PieterDeBie: вы используете expectLastCall вместо expect. - person Jon Skeet; 10.06.2015
comment
@JonSkeet спасибо за ответ. Я думал, что было невозможно иметь методы void с anyXxx, поскольку в моем случае это вызывало исключения. Однако казалось, что я не использовал фиктивный объект. - person Pieter De Bie; 11.06.2015
comment
Я думаю, что это не сработает, если voiceForRemovals является недействительным методом. - person user1821961; 12.07.2018
comment
@user1821961: user1821961: Ну, этот синтаксис для настройки возвращаемого значения не будет работать, но часть сопоставления аргументов будет работать - и об этом был вопрос. Для методов void вы должны вызывать expectLastCall в отдельном операторе вместо andReturn. - person Jon Skeet; 13.07.2018