【发布时间】:2018-04-16 14:09:26
【问题描述】:
我有一个公共方法a(),它正在调用一个私有方法,比如同一类中的B()。
现在我的方法B(私有)调用了一个外部方法(比如search()),它返回字符串列表。根据返回的列表;我必须在方法B 中执行一些逻辑。
当我用一些列表值模拟外部方法调用(模拟search)时,mockito 返回了空列表;不是我在模拟此外部调用时设置的列表。
我不明白为什么,我得到的是空列表。
下面是示例代码:
public class ABC {
@Autowired
private External ext;
// method 1
public void A(String id){
// method private call
B(id);
}
private String B(String id) {
// do something
// external method call
List myList = ext.search(id); // from here we getting empty list
if(myList != null &&
!myList.isEmpty()) {
// do some logic here,
}
}
}
Sample Test Class:
@RunWith(SpringJUnit4ClassRunner.class)
Class MyTest{
@Autowire
ABC abc;
@Test
public void myTest() {
// construct the mocked object
List resultList = new ArrayList();
resultList.add("Java");
resultList.add("C");
resultList.add("Python");
// mock the external API
Mockito.when(externalMock.search(Mockito.any(String.class)).
thenReturn(resultList);
// call method A on ABC class
abc.A(); // public method A call
}
}
// 模拟外部类
@Profile("test")
@Configuration
public class ExternalMock {
@Bean
@Primary
public External getExternal() {
return Mockito.mock(External.class);
}
}
【问题讨论】:
标签: java unit-testing mocking mockito