Mockito.When 方法在调用方法时无法 return 模拟对象
Mockito.When method not able to return mocked object when the method is called
我看到很多关于这个问题的帖子,但仍然无法解决我的问题。
when(queryEngineService.getRelationshipWithResources(anyString(), refEq(filterDto), anyString(), anyString(),
anyInt(), anyInt(), anyString())).thenReturn(tenantResponseDto);
TenantResponseDto dto = queryEngineService.getRelationshipWithResources(anyString(), refEq(filterDto),
anyString(), anyString(), anyInt(), anyInt(), anyString());
当我调试对象时。我看不到其中的模拟数据。有什么我想念的吗?
下面是我的测试类:
public class QueryEngineAPITest extends AbstractTest {
QueryEngineService queryEngineService = Mockito.mock(QueryEngineService.class);
TenantResponseDto tenantResponseDto;
private QueryEngineDto queryEngineDto;
private RelationshipFilterDto filterDto;
@Before
public void setUp() throws Exception {
super.setUp();
prepareMockData();
}
void prepareMockData() {
tenantResponseDto = new TenantResponseDto();
int i = 0;
queryEngineDto = new QueryEngineDto();
List<Map<String, Object>> mockDataList = new ArrayList<Map<String, Object>>();
while (i < 10) {
Map<String, Object> mockDataMap = new HashMap<String, Object>();
mockDataMap.put("APPLICATION", "AWS");
mockDataMap.put("ENVIRONMENT_NAME", "SIGMA LABS" + i);
mockDataList.add(mockDataMap);
i++;
}
queryEngineDto.setQueryData(mockDataList);
tenantResponseDto.setResponseAsQueryEngineDto(queryEngineDto);
tenantResponseDto.setResponseCount(Long.valueOf(queryEngineDto.getQueryData().size()));
filterDto = new RelationshipFilterDto();
filterDto.setBefore("");
}
@Test
public void getRelationShipsTest() throws Exception {
when(queryEngineService.getRelationshipWithResources(eq(""), refEq(filterDto), eq(""), eq(""), eq(1), eq(1),
eq(""))).thenReturn(tenantResponseDto);
TenantResponseDto dto = queryEngineService.getRelationshipWithResources(eq(""), refEq(filterDto), eq(""),
eq(""), eq(1), eq(1), eq(""));
assertFalse(dto.getResponseAsQueryEngineDto().getQueryData().isEmpty());
assertEquals(Long.valueOf(dto.getResponseAsQueryEngineDto().getQueryData().size()), Long.valueOf(10));
}
你的带有参数的模拟方法与你调用的方法不匹配
when(queryEngineService.getRelationshipWithResources(eq(""), refEq(filterDto), eq(""), eq(""), eq(1), eq(1),eq(""))).thenReturn(tenantResponseDto);
TenantResponseDto dto = queryEngineService.getRelationshipWithResources(eq(""), refEq(filterDto), eq(""),
eq(""), eq(1), eq(1), eq(""));
您需要将第二行更改为:
TenantResponseDto dto = queryEngineService.getRelationshipWithResources("",filterDto, "", "", 1, 1, "");
eq
和 refEq
称为参数匹配器,当您想 运行 测试时,您需要按原样提供参数,而不是在参数匹配器中
我看到很多关于这个问题的帖子,但仍然无法解决我的问题。
when(queryEngineService.getRelationshipWithResources(anyString(), refEq(filterDto), anyString(), anyString(),
anyInt(), anyInt(), anyString())).thenReturn(tenantResponseDto);
TenantResponseDto dto = queryEngineService.getRelationshipWithResources(anyString(), refEq(filterDto),
anyString(), anyString(), anyInt(), anyInt(), anyString());
当我调试对象时。我看不到其中的模拟数据。有什么我想念的吗?
下面是我的测试类:
public class QueryEngineAPITest extends AbstractTest {
QueryEngineService queryEngineService = Mockito.mock(QueryEngineService.class);
TenantResponseDto tenantResponseDto;
private QueryEngineDto queryEngineDto;
private RelationshipFilterDto filterDto;
@Before
public void setUp() throws Exception {
super.setUp();
prepareMockData();
}
void prepareMockData() {
tenantResponseDto = new TenantResponseDto();
int i = 0;
queryEngineDto = new QueryEngineDto();
List<Map<String, Object>> mockDataList = new ArrayList<Map<String, Object>>();
while (i < 10) {
Map<String, Object> mockDataMap = new HashMap<String, Object>();
mockDataMap.put("APPLICATION", "AWS");
mockDataMap.put("ENVIRONMENT_NAME", "SIGMA LABS" + i);
mockDataList.add(mockDataMap);
i++;
}
queryEngineDto.setQueryData(mockDataList);
tenantResponseDto.setResponseAsQueryEngineDto(queryEngineDto);
tenantResponseDto.setResponseCount(Long.valueOf(queryEngineDto.getQueryData().size()));
filterDto = new RelationshipFilterDto();
filterDto.setBefore("");
}
@Test
public void getRelationShipsTest() throws Exception {
when(queryEngineService.getRelationshipWithResources(eq(""), refEq(filterDto), eq(""), eq(""), eq(1), eq(1),
eq(""))).thenReturn(tenantResponseDto);
TenantResponseDto dto = queryEngineService.getRelationshipWithResources(eq(""), refEq(filterDto), eq(""),
eq(""), eq(1), eq(1), eq(""));
assertFalse(dto.getResponseAsQueryEngineDto().getQueryData().isEmpty());
assertEquals(Long.valueOf(dto.getResponseAsQueryEngineDto().getQueryData().size()), Long.valueOf(10));
}
你的带有参数的模拟方法与你调用的方法不匹配
when(queryEngineService.getRelationshipWithResources(eq(""), refEq(filterDto), eq(""), eq(""), eq(1), eq(1),eq(""))).thenReturn(tenantResponseDto);
TenantResponseDto dto = queryEngineService.getRelationshipWithResources(eq(""), refEq(filterDto), eq(""),
eq(""), eq(1), eq(1), eq(""));
您需要将第二行更改为:
TenantResponseDto dto = queryEngineService.getRelationshipWithResources("",filterDto, "", "", 1, 1, "");
eq
和 refEq
称为参数匹配器,当您想 运行 测试时,您需要按原样提供参数,而不是在参数匹配器中