Mockito when().thenReturn 没有给出预期的结果



我是Junit和Mockito的新手。试图模拟类的某个对象,但它不起作用。mock方法返回一个空列表,因此测试用例失败。这是我写的代码。

Junit测试类:在这里,我模拟了对象和方法以返回一个Arraylist,但当代码执行时,这个模拟方法返回一个空列表,因为测试用例失败了。

package com.business;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import com.data.api.ToDoService;
public class TodoBusinessImplMockTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testRetrieveTodosRelatedToSpringUsingMock() 
{
ToDoService todoServiceMock = mock(ToDoService.class);

List<String> todoList=Arrays.asList("Learn Spring MVC", "Learn Spring","Learn to Dance");

Mockito.when(todoServiceMock.retrieveTodos("Dummy")).thenReturn(todoList);

TodoBusinessImpl todoBusinessImpl = new TodoBusinessImpl(todoServiceMock);

List<String> todos = todoBusinessImpl.retrieveTodosRelatedToSpring("Ranga");

assertEquals(2, todos.size());
}
}

接口:ToDoService.java

package com.data.api;
import java.util.List;
public interface ToDoService {
public List<String> retrieveTodos(String s);
} 

TodoBusinessImpl.java

package com.business;
import java.util.ArrayList;
import java.util.List;
import com.data.api.ToDoService;
public class TodoBusinessImpl {

private ToDoService todoService;
TodoBusinessImpl(ToDoService todoService) {
this.todoService = todoService;
}
public List<String> retrieveTodosRelatedToSpring(String s) {
List<String> filteredTodos = new ArrayList<String>();
List<String> allTodos = todoService.retrieveTodos(s);
for (String todo : allTodos) {
if (todo.contains("Spring")) {
filteredTodos.add(todo);
}
}
return filteredTodos;
}
}

您的规范显示:

Mockito.when(todoServiceMock.retrieveTodos("Dummy")).thenReturn(todoList);

但您的呼叫使用:

todoBusinessImpl.retrieveTodosRelatedToSpring("Ranga");

"Ranga";不是";Dummy";,因此您的规格不匹配;因此mockito返回默认结果(这将是一个空列表(。

尝试将Mockito.when(todoServiceMock.retrieveTodos("Dummy")).thenReturn(todoList);中的"Dummy"替换为anyString()(import static org.mockito.ArgumentMatchers.anyString;(。这对我有好处。

最新更新