如何在使用了 Spring Boot 和 MyBatis 的应用中使用 Mockito 测试 DAO 层
高洛峰
高洛峰 2016-10-27 17:23:24
0
1
767

在一个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 activities = new ArrayList(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 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 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的类呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆 (1)
三叔

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

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!