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

在一个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

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


郎朗坤
浏览 878回答 2
2回答

万千封印

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

沧海一幻觉

题主知道怎么用junit测这个dao层吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java