powermock+mokito 模拟mybatis-plus 链式操作
写个单元测试类,发现没办法模拟dao层的行为,dao层采用mybatisPlus ,经过半天时间的潜心研究终于解决mybatisplus 链式查询的模拟问题,下面放出解决办法1,自定义的ArgumentMatcher,这里做成了基类,继承后使用import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;import org.moc
·
写个单元测试类,发现没办法模拟dao层的行为,dao层采用mybatisPlus ,经过半天时间的潜心研究终于解决mybatisplus 链式查询的模拟问题,下面放出解决办法
1,自定义的ArgumentMatcher,这里做成了基类,继承后使用
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import org.mockito.ArgumentMatcher;
import org.mockito.Mockito;
public abstract class AbstractMockTest {
public <T, R, Children extends AbstractWrapper<T, R, Children>> AbstractWrapper<T, R, Children>
mpWrp(AbstractWrapper<T, R, Children> mock) {
ArgumentMatcher<AbstractWrapper<T, R, Children>> argumentMatcher = new Eq<>(mock);
return Mockito.argThat(argumentMatcher);
}
private class Eq<T, R, Children extends AbstractWrapper<T, R, Children>>
implements ArgumentMatcher<AbstractWrapper<T, R, Children>> {
private AbstractWrapper<T, R, Children> mock;
public Eq(AbstractWrapper<T, R, Children> mock) {
this.mock = mock;
}
@Override
public boolean matches(AbstractWrapper<T, R, Children> value) {
if (!value.getSqlSegment().equals(mock.getSqlSegment())) {
return false;
}
if (!value.getParamNameValuePairs().toString().equals(mock.getParamNameValuePairs().toString())) {
return false;
}
return true;
}
}
}
2,使用方法
@PowerMockIgnore({"javax.management.*"})
@RunWith(PowerMockRunner.class)
public class MyTest extends AbstractMockTest {
@Mock
private UserMapper userMapper;
@Test
public void test1(){
//初始化表信息
MapperBuilderAssistant mapperBuilderAssistant = new MapperBuilderAssistant(new MybatisConfiguration(), "");
TableInfoHelper.initTableInfo(mapperBuilderAssistant, User.class);
//重点注意mpWrp的使用
when(userMapper.selectList(mpWrp(Wrappers.<User>lambdaQuery()
.eq(User::getId, 1L)))).thenReturn(new User(1));
}
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)