Java 定义模拟后,我是否可以设置/更改模拟的返回值?

Java 定义模拟后,我是否可以设置/更改模拟的返回值?,java,junit,mocking,mockito,junit4,Java,Junit,Mocking,Mockito,Junit4,我想在我的设置方法中创建一个模拟,但在每个测试方法中定义具体的返回值。。这有可能吗 例: 私有列表; @以前 公共作废设置(){ when(mock.xxx())。然后返回(list); } @试验 public void testEmptyList(){ 列表=新的ArrayList(); //方法调用 } @试验 public void testWithOneElement(){ list=Arrays.asList(Long.valueOf(125L)); //方法调用 } 编辑: 我能

我想在我的设置方法中创建一个模拟,但在每个测试方法中定义具体的返回值。。这有可能吗

例:

私有列表;
@以前
公共作废设置(){
when(mock.xxx())。然后返回(list);
}
@试验
public void testEmptyList(){
列表=新的ArrayList();
//方法调用
}
@试验
public void testWithOneElement(){
list=Arrays.asList(Long.valueOf(125L));
//方法调用
}
编辑: 我能找到的最好的例子是:

private List<Long> list = new ArrayList<Long>();

@Before
public void setUp() {
    when(mock.xxx()).thenReturn(list);
}

@Test
public void testEmptyList() {
    // method call
}

@Test
public void testWithOneElement() {
    list.add(Long.valueOf(123L));
    // method call
}
private List=new ArrayList();
@以前
公共作废设置(){
when(mock.xxx())。然后返回(list);
}
@试验
public void testEmptyList(){
//方法调用
}
@试验
public void testWithOneElement(){
列表.添加(长值(123L));
//方法调用
}
由于Java通过引用传递值,只要我们不将新列表分配给列表,我们就可以添加值,mock将处理更新后的列表。 但是,即使对象发生了变化,这种行为也有可能发生吗?所以我模拟了一个方法调用,但定义了稍后返回的内容

例:

私有列表;
@以前
公共作废设置(){
when(mock.xxx())。然后返回(list);
}
@试验
public void testEmptyArrayList(){
列表=新的ArrayList();
//方法调用
}
@试验
public void testImptyLink列表(){
列表=新的LinkedList();
//方法调用
}
您可以添加when(mock.xxx())。然后返回(list);分别将测试用例和非安装程序中的测试用例绑定到()。然后在testEmpty中返回emply列表,并在testWithOneElement中返回包含一个元素的列表

private List<Long> list; 

@Before
public void setUp() {
    // Other setup here
}

@Test
public void testEmptyList() {
    list = new ArrayList<Long>();
    when(mock.xxx()).thenReturn(list); // return list with no element

    // method call
}

@Test
public void testWithOneElement() {
    list = Arrays.asList(Long.valueOf(125L));
    when(mock.xxx()).thenReturn(list);  // return list with one elemet

    // method call
}
私有列表;
@以前
公共作废设置(){
//其他设置在这里
}
@试验
public void testEmptyList(){
列表=新的ArrayList();
when(mock.xxx()).thenReturn(list);//返回不带元素的列表
//方法调用
}
@试验
public void testWithOneElement(){
list=Arrays.asList(Long.valueOf(125L));
when(mock.xxx()).thenReturn(list);//返回一个元素的列表
//方法调用
}
您可以添加when(mock.xxx())。然后返回(list);分别将测试用例和非安装程序中的测试用例绑定到()。然后在testEmpty中返回emply列表,并在testWithOneElement中返回包含一个元素的列表

private List<Long> list; 

@Before
public void setUp() {
    // Other setup here
}

@Test
public void testEmptyList() {
    list = new ArrayList<Long>();
    when(mock.xxx()).thenReturn(list); // return list with no element

    // method call
}

@Test
public void testWithOneElement() {
    list = Arrays.asList(Long.valueOf(125L));
    when(mock.xxx()).thenReturn(list);  // return list with one elemet

    // method call
}
私有列表;
@以前
公共作废设置(){
//其他设置在这里
}
@试验
public void testEmptyList(){
列表=新的ArrayList();
when(mock.xxx()).thenReturn(list);//返回不带元素的列表
//方法调用
}
@试验
public void testWithOneElement(){
list=Arrays.asList(Long.valueOf(125L));
when(mock.xxx()).thenReturn(list);//返回一个元素的列表
//方法调用
}
您可以添加when(mock.xxx())。然后返回(list);分别将测试用例和非安装程序中的测试用例绑定到()。然后在testEmpty中返回emply列表,并在testWithOneElement中返回包含一个元素的列表

private List<Long> list; 

@Before
public void setUp() {
    // Other setup here
}

@Test
public void testEmptyList() {
    list = new ArrayList<Long>();
    when(mock.xxx()).thenReturn(list); // return list with no element

    // method call
}

@Test
public void testWithOneElement() {
    list = Arrays.asList(Long.valueOf(125L));
    when(mock.xxx()).thenReturn(list);  // return list with one elemet

    // method call
}
私有列表;
@以前
公共作废设置(){
//其他设置在这里
}
@试验
public void testEmptyList(){
列表=新的ArrayList();
when(mock.xxx()).thenReturn(list);//返回不带元素的列表
//方法调用
}
@试验
public void testWithOneElement(){
list=Arrays.asList(Long.valueOf(125L));
when(mock.xxx()).thenReturn(list);//返回一个元素的列表
//方法调用
}
您可以添加when(mock.xxx())。然后返回(list);分别将测试用例和非安装程序中的测试用例绑定到()。然后在testEmpty中返回emply列表,并在testWithOneElement中返回包含一个元素的列表

private List<Long> list; 

@Before
public void setUp() {
    // Other setup here
}

@Test
public void testEmptyList() {
    list = new ArrayList<Long>();
    when(mock.xxx()).thenReturn(list); // return list with no element

    // method call
}

@Test
public void testWithOneElement() {
    list = Arrays.asList(Long.valueOf(125L));
    when(mock.xxx()).thenReturn(list);  // return list with one elemet

    // method call
}
私有列表;
@以前
公共作废设置(){
//其他设置在这里
}
@试验
public void testEmptyList(){
列表=新的ArrayList();
when(mock.xxx()).thenReturn(list);//返回不带元素的列表
//方法调用
}
@试验
public void testWithOneElement(){
list=Arrays.asList(Long.valueOf(125L));
when(mock.xxx()).thenReturn(list);//返回一个元素的列表
//方法调用
}

所以。。经过反复试验,我做出了如下结论:

private List<Long> list; 

@Before
public void setUp() {
    when(mock.xxx()).thenAnswer(
            new Answer<List<Long>>() {
                @Override
                public List<Long> answer(final InvocationOnMock invocation) {
                    return list;
                }
            });
}

@Test
public void testEmptyArrayList() {
    list = new ArrayList<Long>();
    // method call
}

@Test
public void testEmptyLinkedList() {
    list = new LinkedList<Long>();
    // method call
}
私有列表;
@以前
公共作废设置(){
当(mock.xxx())。然后回答(
新答案(){
@凌驾
公共列表应答(最终调用锁调用){
退货清单;
}
});
}
@试验
public void testEmptyArrayList(){
列表=新的ArrayList();
//方法调用
}
@试验
public void testImptyLink列表(){
列表=新的LinkedList();
//方法调用
}

由于我们现在在安装程序中定义,不是“返回值”,而是
“准备返回值的被调用方法”,并且由于此方法将首先在运行时调用,因此我们不会得到空指针,并且将返回我们在每个方法中分配的值。

。。经过反复试验,我做出了如下结论:

private List<Long> list; 

@Before
public void setUp() {
    when(mock.xxx()).thenAnswer(
            new Answer<List<Long>>() {
                @Override
                public List<Long> answer(final InvocationOnMock invocation) {
                    return list;
                }
            });
}

@Test
public void testEmptyArrayList() {
    list = new ArrayList<Long>();
    // method call
}

@Test
public void testEmptyLinkedList() {
    list = new LinkedList<Long>();
    // method call
}
私有列表;
@以前
公共作废设置(){
当(mock.xxx())。然后回答(
新答案(){
@凌驾
公共列表应答(最终调用锁调用){
退货清单;
}
});
}
@试验
public void testEmptyArrayList(){
列表=新的ArrayList();
//方法调用
}
@试验
public void testImptyLink列表(){
列表=新的LinkedList();
//方法调用
}

由于我们现在在安装程序中定义,不是“返回值”,而是“准备返回值的被调用方法”,并且由于此方法将首先在运行时调用,因此我们不会得到空指针,并且将返回我们在每个方法中分配的值。

。。经过反复试验,我做出了如下结论:

private List<Long> list; 

@Before
public void setUp() {
    when(mock.xxx()).thenAnswer(
            new Answer<List<Long>>() {
                @Override
                public List<Long> answer(final InvocationOnMock invocation) {
                    return list;
                }
            });
}

@Test
public void testEmptyArrayList() {
    list = new ArrayList<Long>();
    // method call
}

@Test
public void testEmptyLinkedList() {
    list = new LinkedList<Long>();
    // method call
}
私有列表;
@以前
公共作废设置(){
当(mock.xxx())。然后回答(
新答案(){
@凌驾
公共列表应答(最终调用锁调用){
退货清单;
}
});
}
@试验
公共空隙试验