为了账号安全,请及时绑定邮箱和手机立即绑定

如何在使用了 Spring Boot 和 MyBatis 的应用中使用 Mockito 测试

如何在使用了 Spring Boot 和 MyBatis 的应用中使用 Mockito 测试

郎朗坤 2019-03-22 11:15:33
在一个web项目的开发中,对于controller和service的测试,可以利用mockito框架来进行快速的单元测试。每个测试用例都只测试被测方法的功能,而不关系其调用的其他方法的功能是否正确。@RunWith(MockitoJUnitRunner.class)public class ActivityControllerTest {    @Mock    private ActivityService activitySearcher;    private ActivityController controller;    @Before    public void setUp() throws Exception {        controller = new ActivityController(activitySearcher);    }    @Test    public void should_return_activity_list() throws Exception {        List<Activity> activities = new ArrayList<Activity>(3);        for (int i = 1; i < 4; i++) {            Activity activity = new Activity();            activity.setId(i);            activity.setTitle("activity" + i);            activity.setCreateTime(1L);            activity.setEndTime(2L);            activity.setImg("/img/" + i + ".jpg");            activities.add(activity);        }        int page = 1;        when(activitySearcher.getList(page)).thenReturn(activities);        List<Activity> result = controller.getList(page);        assertThat(result, is(activities));    }}但是对于dao层,因为使用spring和mybatis整合,所以我只需要写接口就可以完成工作:@Repository@Mapperpublic interface ActivityDao {    @Select("select id, title, content, create_time, end_time, img " +                    "from activity limit #{start}, #{offset}")    List<Activity> list(@Param("start") int start,                        @Param("offset") int offset);    @Insert("insert into activity(title, content, create_time, end_time, img)" +                    "value (#{title}, #{content}, #{createTime}, #{endTime}, #{img})")    int addActivity(Activity activity);}但是这样,具体的实现就交给了框架完成了。这时,我仍旧希望能够通过mockito框架来进行测试,模拟出数据库连接和sql执行的结果,我应该用mock创建什么对象呢?是不是需要找到创建数据库连接和执行sql的类,然后mock出来?但是我应该怎么去找到这些需要mock的类呢?
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

数据库测试没必要使用mock使用spring-test直接连接数据库测试,在单元测试环境中事务会自动回滚,清理测试数据。这样准确性高也简单容易。


查看完整回答
反对 回复 2019-04-25
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

题主知道怎么用junit测这个dao层吗?


查看完整回答
反对 回复 2019-04-25
  • 2 回答
  • 0 关注
  • 877 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号