jmockit中的诡异陷阱
以前用过一些Mock框架;使用jmockit时,我以为mock框架都差不多,jmockit也不例外。吃了一些苦头才发现,jmockit是多么的与众不同(中性词).
在我看来,jmockit作者的思维方式是扭曲的,jmockit的用法也是诡异的。要想充分利用jmockit的强大功能,你必须容忍它与众不同的地方。本文给出一些最近收集到的诡异点:
Mock行为中的诡异点
看起来只Mock了一个对象,实际上Mock了整个类
@Test public void test_Not_Invoked_Method(){ Service service = new Service(); service.setCache(cache); service.setDao(dao); final SimpleBean bean = new SimpleBean(); new Expectations(){{ mockedList.someMethod(); //会出错,因为service.saveAndCache(bean)时不需要调任何MockedList的方法 }}; service.saveAndCache(bean); } @Test public void test_NoCoverage(){ Service service = new Service(); service.setCache(cache); service.setDao(dao); new Expectations(){{ //测试可以通过,虽然这里没有录制任何被mock类的方法 }}; service.saveAndCache(new SimpleBean()); } @Test public void test_CoverOnlyOne(){ Service service = new Service(); service.setCache(cache); service.setDao(dao); final SimpleBean bean = new SimpleBean(); new Expectations(){{ //测试可以通过,虽然这里只录制了部分被mock类的方法 dao.save(bean); }}; service.saveAndCache(bean); }