Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在一个测试方法中创建单个类的模拟和非模拟实例?_Java_Junit_Jmockit - Fatal编程技术网

Java 如何在一个测试方法中创建单个类的模拟和非模拟实例?

Java 如何在一个测试方法中创建单个类的模拟和非模拟实例?,java,junit,jmockit,Java,Junit,Jmockit,如何在一个测试方法中创建单个类的模拟和非模拟实例 如果“条目”的“lastContact”属性早于5分钟,则该条目可能会过期。我使用模拟来创建这样一个条目对象: @Test public void entryOlderThanFiveMinutesIsExpired() { new MockUp<Entry>() { @Mock public Date getLastContact() { return new Dat

如何在一个测试方法中创建单个类的模拟和非模拟实例

如果“条目”的“lastContact”属性早于5分钟,则该条目可能会过期。我使用模拟来创建这样一个条目对象:

@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));
}
@测试
public void entryolder超过五分钟{
新模型(){
@嘲弄
公共日期getLastContact(){
返回新日期(10000L);//过去的日期
}
};
Entry expiredEntry=新条目();
断言(expiredEntry.isExpired(),为(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));
}
@测试
公开无效测试(){
Entry unexpiredEntry=new Entry();//不应对此进行模拟
新模型(){
@模拟(调用=1)
公共日期getLastContact(){
返回新日期(10000L);//过去的日期
}
};
Entry expiredEntry=新条目();
断言(expiredEntry.isExpired(),为(true));
断言(unexpiredtry.isExpired(),为(false));
}
这是失败的。我尝试了几种设置模拟的方法,但没有成功。 我怎样才能解决这个问题


谢谢

您可以通过添加
mockit.Invocation
参数并使mock方法
可重入
来实现。但是使用Expectations API更简单,您可以在其中声明一个“
@Injectable Entry expiredEntry
”模拟字段/参数,该字段/参数不会影响
Entry
的其他实例