Как я могу вызвать методы Apache MethodUtils с макетами из Mockito в качестве параметров? - PullRequest
0 голосов
/ 14 ноября 2011

Я иногда использую org.apache.commons.beanutils.MethodUtils ( api link ). Я обычно избегаю рефлексии, но, увы, этот случай требует этого.

Моя проблема касается тестирования. Я использую Mockito для насмешек, и когда я вызываю MethodUtils.invokeMethod с насмешкой в ​​качестве аргумента, MethodUtils выдает NoSuchMethodError, потому что считает, что смоделированный объект не соответствует типу параметра. Есть предложения?

Подпись конкретного метода, по которому я звоню:

public void propagateMirrorRateOfferId(MasterAvailabilityRule masterAvailabilityRule)

Мое издевательское поколение:

@RunWith(MockitoJUnitRunner.class)
public class SomeTest {

    private static final Long RATE_OFFER_ID = 1L;
    private static final Long RATE_ENTITY_ID = 2L;
    private static final Long ORIGINAL_RATE_OFFER_ID = 3L;
    private static final Long ORIGINAL_RATE_ENTITY_ID = 4L;


    @Mock MasterAvailabilityRule masterAvailabilityRule;
    PropertyAvailabilityRule propertyAvailabilityRule;

    @Before
    public void setUp() throws Exception {
        propertyAvailabilityRule = new PropertyAvailabilityRule();
        propertyAvailabilityRule.setMirrorRateOfferId(ORIGINAL_RATE_OFFER_ID);
        propertyAvailabilityRule.setMirrorRateEntityId(ORIGINAL_RATE_ENTITY_ID);
    }

    @Test
    public void testPropagate() throws Exception {
        // arrange
        when(masterAvailabilityRule.determineAvailabilityMirroringRelationship(any(String.class))).
            thenReturn(new AvailabilityMirroringRelationship(RATE_OFFER_ID, RATE_ENTITY_ID));
        when(masterAvailabilityRule.isMirrorLocked()).
                thenReturn(true);

        // action
        SomeUtility.thatCallsMethodUtilsAndPassesThisMock(masterAvailabilityRule);

        // assert
        assertEquals("Should have updated the mirrored rate offer id.", RATE_OFFER_ID, propertyAvailabilityRule.getMirrorRateOfferId());
        assertEquals("Should have updated the mirrored rate entity id.", RATE_ENTITY_ID, propertyAvailabilityRule.getMirrorRateEntityId());


    }
}

Спасибо всем, разобрались

Придумывая примеры для вас, ребята, я поместил вызов MethodUtils непосредственно в мой тест, и он сработал. Оказывается, я импортировал класс MethodUtils из org.apache.commons.lang.reflect.MethodUtils в моем служебном классе. По какой-то причине эта версия класса терпит неудачу с издевательствами. Когда я использую org.apache.commons.beanutils.MethodUtils, это работает. Не уверен почему. Возможно, мне следует обновить свой первоначальный вопрос, чтобы спросить, почему не работает тот, который находится в пакете reflect ... В любом случае, мой вопрос будет помечен как ответившийся, как только пройдет достаточно времени, чтобы я мог представить ответ.

1 Ответ

0 голосов
/ 15 ноября 2011

Оказывается, я импортировал класс MethodUtils из org.apache.commons.lang.reflect.MethodUtils в моем служебном классе. По какой-то причине эта версия класса терпит неудачу с издевательствами. Когда я использую org.apache.commons.beanutils.MethodUtils, это работает.

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