Java Mockito:如果预定义的搜索条件被传递给dao并且调用了具有dao的服务,则该服务不起作用

Java Mockito:如果预定义的搜索条件被传递给dao并且调用了具有dao的服务,则该服务不起作用,java,junit,mockito,Java,Junit,Mockito,service.searchRaashanRegister包含另一个方法adresseDao.findRaashan(crit),该方法应为参数setUnit“BUBBA” 无法获取发生错误的原因 就我对您的代码的理解而言,我认为您需要使用eqmatcher-org.mockito.Matchers.eq来设置特定实例的期望值 我假设raashanDao是一个模拟实例,所以它会像 when(raashanDao.findRaashan(eq(crit))。然后返回(searchResult) 更

service.searchRaashanRegister
包含另一个方法
adresseDao.findRaashan(crit)
,该方法应为参数
setUnit
“BUBBA”


无法获取发生错误的原因

就我对您的代码的理解而言,我认为您需要使用
eq
matcher-
org.mockito.Matchers.eq
来设置特定实例的期望值

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

when(raashanDao.findRaashan(eq(crit))。然后返回(searchResult)

更新:对于之前的讨论,我想我误解了你的问题<代码>eq(crit)
应在
中以及在验证中正常工作,无需设置任何内容,因为这是一个方法参数

显示了一个示例


对于不关心的参数值,可以使用
any
,对于特定值,可以使用
eq

eq(临界)不起作用。我不明白(也需要将相同的crit实例设置为raashanDao模拟实例)。在@Before中,我们已经初始化了服务类,将上面的mock对象作为参数,代码类似于@Before public void init(){MockitoAnnotations.initMocks(this);service=new RaashanServicesImpl(RaashanDao,manlingDao,quatroDao);}crit是findRaashan方法->RaashanDao.findRaashan(crit)中的条件参数。它是一个具有各种参数的对象,如上面代码段所示,这就是为什么您的
any
匹配器可以工作的原因,因为您不必为特定实例而烦恼。您将无法使用
eq
,除非您将代码更改为有某种方式来设置
crit
。总之,当实际方法调用发生时,使用的值
eq
应该可用。有很多方法可以做到这一点。让我们来看看。请阅读。您希望在问题中包含所有相关代码,而不是在答案上给出更多的注释。这个问题需要独立存在,包含了所有我们需要回答的东西。这显然不是
  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 );
@Before
public void init() {
  MockitoAnnotations.initMocks(this);