【发布时间】:2019-01-19 18:33:51
【问题描述】:
我正在尝试使用 mockito 为服务类方法进行代码覆盖。我是 mockito 的新手,并试图模拟对服务方法的调用,但代码覆盖率为 0。我不确定我是否可以模拟调用或者我是否可以使用这个特定的方法。如果您有任何建议,请让我知道。 代码:
public List<Something> getTrackerData(String startDay,List<Something> someList, boolean check,String name)
{
//filled with many if else checks
}
这是我想要覆盖的方法。
@InjectMocks 私有TrackerService trackerService;
@Before
public void setup(){
MockitoAnnotations.initMocks(this);
}
@Test
public void test01()
{
Something ttd =new Something();
ttd.setCoverageSubType("None");
ttd.setCoveredAmount("1.0");
List<Something> list = new ArrayList<>();
list.add(ttd);
List<Something > newlist = mock(List.class);
// when(trackerService.getTrackerData("", newlist, false, "")).
// thenReturn(list);
resultList = trackerService.getTrackerData(anyString(), anyList(), anyBoolean(), anyString());
}
这是我写的测试。我意识到 when 和 Mockito.verify() 仅适用于模拟依赖项。但在这里我没有任何依赖来模拟。所以,问题是我可以用 Mockito 存根参数模拟对trackerService.getTrackerData() 的调用,还是我必须只用实际参数测试方法?
【问题讨论】:
-
为了让它工作,您需要将调用中的实际参数交换到
Mockito.when与存根参数。然后使用一些测试参数调用实际的服务(在你的 sn-p 最后一行) -
所以这将是唯一的方法吗?
-
这是正确的方法。我想说的是,您目前正在做的是对 mockito 的错误使用
-
是的,我知道,但问题是我想看看是否可以在不传递确切参数的情况下调用该方法,因为这会消耗大量时间。
-
明确地说,您正在尝试对您尝试模拟的方法进行代码覆盖?
标签: java unit-testing junit mockito code-coverage