我有一个代码,我不能正确涵盖测试。我正在使用mockito图书馆。在开始考试的那一刻我遇到了困难。
测试代码如下:
@Test
public void testLoadCar() {
when(remoteService.loadData()).thenReturn(new DataResult<DataCar>("", "", new DataCar()));
when(dataResult.hasError()).thenReturn(true);
when(dataResult.response.hasHeaders()).thenReturn(true);
requestNetwork = new RequestNetwork(remoteService);
Response<DataCar> response = requestNetwork.load(request);
}
这些是测试类中的对象:remoteservice、dataresult、request。
我担心的是,我正在尝试实现when方法:
when(dataResult.response.hasHeaders()).thenReturn(true);
我想知道这样的录音是否有效。如果它不起作用,那么我们如何处理这个时刻:
protected Response createResponse(DataResult<T> dataResult) {
if (dataResult.hasError() || !dataResult.response.hasHeaders()) {
return dataResult.getErrorMessage());
} else {
return Response.data(dataResult.value);
}
}
这是被测系统(sut)上具有createresponse()方法的方法。此方法包含对dataresult对象的mock方法的调用。为了实现dataresult.haserror(),我得到了:
when (dataResult.hasError ()). thenReturn (true);
那就用!dataresult.response.hasheaders()我有个问题。因为我不知道如何替换我需要的值。
1条答案
按热度按时间70gysomp1#
并不是所有与测试对象交互的对象都需要模拟。记住你也可以使用pojo。
DataResult
看起来是个完美的pojo候选人。如果可以创建具有所需状态和行为的pojo,那么使用mock objet将一无所获。查看发布的代码,似乎很容易创建:
除此之外:
我觉得你的代码可疑。
拔桩时
remoteService.loadData()
创建的新示例DataResult
随后,您在dataResult
,它不是从返回的对象remoteService.loadData()
回复原文:可以在mock上设置字段(如果访问修饰符允许,可以直接设置,否则可以通过反射设置)。请注意,这并不是非常惯用和令人惊讶的mock用法。