Как создать макетированный и немодальный экземпляр одного класса в одном тестовом методе? - PullRequest
2 голосов
/ 19 января 2012

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

Срок действия «Entry» может истечь, если его атрибут «lastContact» старше 5 минут. Я использую Mock для создания такого Entry-объекта:

@Test
public void entryOlderThanFiveMinutesIsExpired() {

    new MockUp<Entry>() {
        @Mock
        public Date getLastContact() {
            return new Date(10000L); // date in the past
        }
    };
    Entry expiredEntry = new Entry();
    assertThat(expiredEntry.isExpired(), is(true));
}

Это отлично работает. В следующем тесте мне понадобится запись «expired» и запись «not expired» (обе будут добавлены в EntryList, и после «purge ()» должна остаться только запись «expired». Но настройка mocks изменяет весь класс, поэтому все экземпляры этого класса будут mocked:

@Test
public void test() {

    Entry unexpiredEntry = new Entry(); // this should not be mocked

    new MockUp<Entry>() {
        @Mock(invocations = 1)
        public Date getLastContact() {
            return new Date(10000L); // date in the past
        }
    };
    Entry expiredEntry = new Entry();
    assertThat(expiredEntry.isExpired(), is(true));
    assertThat(unexpiredEntry.isExpired(), is(false));
}

Это не удалось. Я пробовал несколько способов настройки макетов, но не понял. Как я могу решить эту проблему?

Спасибо

1 Ответ

3 голосов
/ 31 января 2012

Вы можете сделать это, добавив параметр mockit.Invocation и сделав метод макета reentrant.Но это проще с API ожиданий, где вы можете объявить фиктивное поле / параметр "@Injectable Entry expiredEntry", которое не повлияет на другие экземпляры Entry.

...