在一個(gè)web項(xiàng)目的開(kāi)發(fā)中,對(duì)于controller和service的測(cè)試,可以利用mockito框架來(lái)進(jìn)行快速的單元測(cè)試。每個(gè)測(cè)試用例都只測(cè)試被測(cè)方法的功能,而不關(guān)系其調(diào)用的其他方法的功能是否正確。@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)); }}但是對(duì)于dao層,因?yàn)槭褂胹pring和mybatis整合,所以我只需要寫(xiě)接口就可以完成工作:@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);}但是這樣,具體的實(shí)現(xiàn)就交給了框架完成了。這時(shí),我仍舊希望能夠通過(guò)mockito框架來(lái)進(jìn)行測(cè)試,模擬出數(shù)據(jù)庫(kù)連接和sql執(zhí)行的結(jié)果,我應(yīng)該用mock創(chuàng)建什么對(duì)象呢?是不是需要找到創(chuàng)建數(shù)據(jù)庫(kù)連接和執(zhí)行sql的類(lèi),然后mock出來(lái)?但是我應(yīng)該怎么去找到這些需要mock的類(lèi)呢?
2 回答

萬(wàn)千封印
TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
添加回答
舉報(bào)
0/150
提交
取消