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

查看:235
本文介绍了java - 如何在使用了 Spring Boot 和 MyBatis 的应用中使用 Mockito 测试 DAO 层的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在一个web项目的开发中,对于controllerservice的测试,可以利用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层,因为使用springmybatis整合,所以我只需要写接口就可以完成工作:

@Repository
@Mapper
public 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的类呢?

解决方案

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

这篇关于java - 如何在使用了 Spring Boot 和 MyBatis 的应用中使用 Mockito 测试 DAO 层的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆