如何在一个测试方法中创建单个类的模拟和非模拟实例?
如果其“lastContact”属性超过 5 分钟,则“条目”可能会过期。我使用 Mock 来创建这样的 Entry-object:
@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));
}
这工作正常。在下一个测试中,我需要一个“过期”和一个非“过期”条目(两者都将被添加到一个 EntryList 并且在“purge()”之后只有未过期的条目应该保留)。但是设置模拟会改变整个类,因此该类的所有实例都将被模拟:
@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));
}
这失败了。我尝试了几种设置模拟的方法,但我没有得到它。我怎么解决这个问题?
谢谢