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())。然后回答(
新答案(){
@凌驾
公共列表应答(最终调用锁调用){
退货清单;
}
});
}
@试验
公共空隙试验