我存根了Mybatis PageHelper插件封装的DAO方法,但是它不起作用

问题描述 投票:0回答:1

我正在测试一些旧代码,使用 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是我提供的东西清单,但它是空的。

unit-testing junit mockito mybatis
1个回答
0
投票

你应该存根

aMethod
而不是
queryById
。当您模拟 dao 时,您创建的是方法的存根,而不是主体。

© www.soinside.com 2019 - 2024. All rights reserved.