Как захватить экземпляр фиктивного типа, созданного в тесте?

1

Я пытаюсь захватить экземпляр издевающегося типа, который создается в тесте. Я не могу заставить его работать.

Учитывая класс:

public class Foo {}

Не удалось выполнить следующий тест:

@RunWith(JMockit.class)
public class FooTest {

    @Test
    public void capturing(@Capturing Foo expected) {
        final Foo actual = new Foo();
        assertThat(actual, is(theInstance(expected)));
    }

}

Любая идея, что я могу делать неправильно?

Я также попытался использовать поле вместо тестового аргумента (см. Ниже), и он тоже не работает:

@RunWith(JMockit.class)
public class FooTest {

    // The captured instance is now a field, instead of a test parameter.
    @Capturing private Foo expected;

    @Test
    public void capturing() {
        final Foo actual = new Foo();
        assertThat(actual, is(theInstance(expected)));
    }

}

В документации указано, что она должна работать, но я не могу заставить ее работать.

благодаря

JMockit v1.7

  • 0
    В документации не сказано, что это должно работать. @Capturing используется для присвоения захваченных экземпляров фиктивному полю, но никогда не делал этого для фиктивных параметров .
  • 0
    @ Rogério В приведенном выше примере документации, упомянутой выше, специально используется @Capturing для фиктивных параметров. Вы упоминаете в своем комментарии, что экземпляры захвата больше не назначаются для ложных полей ... Я думаю, что документация нуждается в небольшой работе в этой области, чтобы добавить еще один кусочек удивительности к и без того потрясающему программному обеспечению.
Показать ещё 1 комментарий
Теги:
jmockit

2 ответа

0
Лучший ответ

Вдохновленный ответом на другой вопрос на этом сайте, я получил его для работы с:

@RunWith(JMockit.class)
public class FooTest {

    @Test
    public void capturing(@Mocked final Foo unused) {
        final Foo expected[] = new Foo[1];
        new Expectations() {{
            new Foo();
            result = new Delegate() {
                void captureIt(Invocation inv) {
                    expected[0] = (Foo) inv.getInvokedInstance();
                }
            };
        }};

        final Foo actual = new Foo();
        assertThat(actual, is(theInstance(expected[0])));
    }

}

Тьфу.

1

Самый простой способ заключается в следующем:

@Test
public void capturing(@Mocked Foo unused)
{
    final Foo actual = new Foo();

    new Verifications() {{
        List<Foo> expected = withCapture(new Foo());
        assertThat(actual, is(theInstance(expected.get(0))));
    }};
}

Однако используемый выше метод withCapture(T) был добавлен только в JMockit 1.8, который еще не выпущен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню