如何将参数传递给模拟对象



我有一个class

class SearchCriteria
{  
    someEnum with values like "A","B"
    int id;
} 

我想用一个方法模拟一个委托

class Delegate 
{
    int getSomeStuff(SearchCriteria search) 
    { 
         //call dao and return count   
    }    
}

如何使用Mock传递搜索条件

Delegate mock; 
when(mock.getSomeStuff(??))thenReturn(5); 

对于搜索条件的不同用例,我希望返回不同的值

所以如果enum在SearchCriteria被设置为A然后返回0,在B然后返回1…等

如何实现?

你可以这样做:

when(mock.getSomeStuff(CriteriaA)).thenReturn(0);   
when(mock.getSomeStuff(CriteriaB)).thenReturn(1);

另一种方法是提供一个方法,在调用mock时执行,使用以下结构:

   when(mock.getSomeStuff(any(Criteria.class))).thenAnswer(new Answer<Integer>{
        @Override
        public Integer answer(InvocationOnMock invocation) throws Throwable {
           // inspect args in invocation and return
           // ...
        }
   });

允许您执行更复杂的响应。

如果您需要检查参数,那么您可以使用假实现,如:

Delegate mock = new Delegate() {
    public int getSomeStuff(SearchCriteria search) {
        // Check search param
        return 0;
    }
};

相关内容

  • 没有找到相关文章

最新更新