我正在测试一些旧代码,使用 Mybatis PageHelper 插件和 Mockito。
待测班级:
import com.github.pagehelper.ISelect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
class AService{
private SomeDao aDao;
public void aMethod(){
...
ISelect iSelect = () -> aDao.queryById(queryStatement);
PageInfo<Stuff> pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(iSelect);
List<Stuff> stuffs = pageInfo.getList();
}
}
测试班:
import ...
class serviceTest{
@Mock
public SomeDao aDao;
@InjectMocks
public AService service;
.....
@Test
public void testMethod(){
List<Stuff> list = Collections.singletonList(new Stuff());
Mockito.when(aDao.queryById(any(QueryStatement.class))).thenAnswer((inv)->{
System.out.println("stub of aDao.queryById is called");
return list;
});
....
}
}
然后当 pageInfo.getList() 返回时我得到一个空列表,为什么?
当执行“doSelectPageInfo()”方法时,我使用“System.out.println(“调用aDao.queryById的存根”)来验证dao对象方法的模拟是否实际被调用。我期望的是pageInfo.List是我提供的东西清单,但它是空的。
你应该存根
aMethod
而不是queryById
。当您模拟 dao 时,您创建的是方法的存根,而不是主体。