【问题标题】:Mockito mock CassandraOperation Slice methodMockito 模拟 CassandraOperation Slice 方法
【发布时间】:2020-05-01 12:47:00
【问题描述】:

我正在使用Mockito框架编写模拟Junit测试用例下面是我的Service类来测试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();
}

编写测试用例类

@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

【问题讨论】:

  • 您能否尝试使用any() 而不是模拟的select?如果没有帮助,请将堆栈跟踪添加到您的问题中。

标签: spring-boot mockito cassandra-3.0


【解决方案1】:

您的代码 sn-p 没有意义,因为您在测试中调用了 service.getMetricsReports(date, null),但您的 UserService 代码示例只有方法 getUserDTO。假设这只是一个错字,那么您需要使用匹配器来让模拟在您的when 中工作。

Mockito.when(template.slice(any(Select.class), eq(UserDTO.class))).thenReturn(userDTO);

这意味着只要第一个参数是Select 类型的类,第二个等于UserDTO.class,则返回userDTO,如果这两个参数不匹配这些条件,它将返回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);

【讨论】:

  • 是的,它的错字错误编辑了问题,感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 2022-01-11
  • 1970-01-01
  • 2020-01-21
  • 2023-03-20
  • 2015-11-04
  • 1970-01-01
相关资源
最近更新 更多