Mockito 模拟 CassandraOperation Slice 方法
Mockito mock CassandraOperation Slice method
我正在使用Mockito框架编写模拟Junit测试用例下面是我的服务class来测试Junit测试代码
public class UserService {
@Autowired
private CassandraOperations template
public UserDTO getUserDTO(String date, String pagingState) {
Select select = QueryBuilder.select().all()
.from("tbl_user");
select.where(QueryBuilder.eq(date, date));
select.setFetchSize(30);
if (pagingState != null) {
select.setPagingState(PagingState.fromString(pagingState));
}
Slice<UserDTO> usgerDTO = template.slice(select, UserDTO.class);
if(usgerDTO.hasNext()) {
}
return usgerDTO.get();
}
测试用例Class写好了
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@InjectMocks
private UserService service ;
@Mock
private CassandraOperations template;
@Mock
private UserDTO userDTO;
private String date= "2019-09";
@Test(expected = Exception.class)
public void test() {
Slice<UserDTO> userDTO= Mockito.mock(Slice.class);
Select select = Mockito.mock(Select.class);
Mockito.when(template.slice(select, UserDTO.class)).thenReturn(userDTO);
metricReportDTO = service.getUserDTO(date, null);
}
}
我在这一行得到了 Null 值
Slice<UserDTO> usgerDTO = template.slice(select, UserDTO.class);
你能告诉我如何测试 template.slice 方法吗
注意:我不应该使用 PowerMockito
您的代码片段没有意义,因为您在测试中调用了 service.getMetricsReports(date, null)
,但您的 UserService
代码示例只有方法 getUserDTO
。假设这只是一个拼写错误,那么您需要使用匹配器让模拟在您的 when
中工作。
Mockito.when(template.slice(any(Select.class), eq(UserDTO.class))).thenReturn(userDTO);
这意味着只要第一个参数是 Select
类型的 class 并且第二个参数等于 UserDTO.class
那么 return 如果那些 userDTO
2 个参数不符合这些条件它将 return null
.
假设它有一个被覆盖的 equals
方法,您也可以使其与 Select
完全匹配。如果您发送 null
pagingState
则类似:
Select stubSelect = QueryBuilder.select().all()
.from("tbl_user");
stubSelect.where(QueryBuilder.eq(date, date));
stubSelect.setFetchSize(30);
Mockito.when(template.slice(eq(stubSelect), eq(UserDTO.class))).thenReturn(userDTO);
我正在使用Mockito框架编写模拟Junit测试用例下面是我的服务class来测试Junit测试代码
public class UserService {
@Autowired
private CassandraOperations template
public UserDTO getUserDTO(String date, String pagingState) {
Select select = QueryBuilder.select().all()
.from("tbl_user");
select.where(QueryBuilder.eq(date, date));
select.setFetchSize(30);
if (pagingState != null) {
select.setPagingState(PagingState.fromString(pagingState));
}
Slice<UserDTO> usgerDTO = template.slice(select, UserDTO.class);
if(usgerDTO.hasNext()) {
}
return usgerDTO.get();
}
测试用例Class写好了
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
@InjectMocks
private UserService service ;
@Mock
private CassandraOperations template;
@Mock
private UserDTO userDTO;
private String date= "2019-09";
@Test(expected = Exception.class)
public void test() {
Slice<UserDTO> userDTO= Mockito.mock(Slice.class);
Select select = Mockito.mock(Select.class);
Mockito.when(template.slice(select, UserDTO.class)).thenReturn(userDTO);
metricReportDTO = service.getUserDTO(date, null);
}
}
我在这一行得到了 Null 值
Slice<UserDTO> usgerDTO = template.slice(select, UserDTO.class);
你能告诉我如何测试 template.slice 方法吗
注意:我不应该使用 PowerMockito
您的代码片段没有意义,因为您在测试中调用了 service.getMetricsReports(date, null)
,但您的 UserService
代码示例只有方法 getUserDTO
。假设这只是一个拼写错误,那么您需要使用匹配器让模拟在您的 when
中工作。
Mockito.when(template.slice(any(Select.class), eq(UserDTO.class))).thenReturn(userDTO);
这意味着只要第一个参数是 Select
类型的 class 并且第二个参数等于 UserDTO.class
那么 return 如果那些 userDTO
2 个参数不符合这些条件它将 return null
.
假设它有一个被覆盖的 equals
方法,您也可以使其与 Select
完全匹配。如果您发送 null
pagingState
则类似:
Select stubSelect = QueryBuilder.select().all()
.from("tbl_user");
stubSelect.where(QueryBuilder.eq(date, date));
stubSelect.setFetchSize(30);
Mockito.when(template.slice(eq(stubSelect), eq(UserDTO.class))).thenReturn(userDTO);