Mockito:如果将预定义的搜索条件传递给dao并且调用了具有dao的服务,则何时不工作

时间:2017-06-08 05:14:43

标签: java junit mockito

service.searchRaashanRegister包含另一种方法adresseDao.findRaashan(crit),该方法应返回参数setUnit "BUBBA"

的特定结果
  SearchResult<Raashan> searchResult = new SearchResult<Raashan>();
  searchResult.setSize(1);
  searchResult.setResult(Arrays.asList(raashan));

  SearchCriteria crit = new SearchCriteria ();
  crit.setUnit(new HashSet<String>(Arrays.asList("BUBBA")));
  crit.setPage(0);
  crit.setPageSize(15);
  crit.setSort(null);
  crit.setQuery("");
  crit.setSortAsc(Boolean.TRUE);

  when(raashanDao.findRaashan(crit)).thenReturn(searchResult);

  //This request is sent to web service from which above criteria is created.
  RaashanSearchRequest searchRequest = new RaashanSearchRequest ();
  searchRequest .setPage(0);
  searchRequest .setPageSize(15);
  searchRequest .setUnit("BUBBA");
  searchRequest .setQuery("");
  searchRequest .setSort(null);
  searchRequest .setSortASC(Boolean.TRUE);

  RaashanResponse response = service.searchRaashanRegister(searchRequest );

上述代码未提供所需结果,adresseDao.findRaashan(crit)正在返回Null。当我使用any(SearchCriteria.class)然后测试通过好,但我们想要特定标准的结果。

我还在@Before中添加了initMocks:

@Before
public void init() {
  MockitoAnnotations.initMocks(this);

无法获得发生错误的原因。

1 个答案:

答案 0 :(得分:0)

据我了解您的代码,我认为如果您计划在特定实例上设置期望,则需要使用eq匹配器 - org.mockito.Matchers.eq

我假设raashanDao是一个模拟实例,所以它就像是,

when(raashanDao.findRaashan(eq(crit))).thenReturn(searchResult);

更新:对于之前的讨论,我想,我误解了你的问题。 eq(crit)应该在when中工作,并且在不设置任何内容的情况下进行验证,因为这是方法参数。

示例显示为here

您使用any表示您不关心的参数值,并将eq用于特定值。