在Jmockit的新版本中,測試數據准備的神器Deencapsulation已經被移除,那么就需要一些另外的方法來替代。
1.設置全局變量:在Jmock的版本更新日志中,推薦用@Injectable與@Tested來替代Deencapsulation.setField,但是這個方法是不能用來設置靜態屬性的,這時需要用jdk中的Filed類的set來解決,
TestA testA = new TestA(); OneClass oneClass = new OneClass(); Field testAField = oneClass.class.getDeclaredField("testA"); testAField.setAccessible(true); testAField.set(oneClass, testA);
2.獲取全局變量:和上個例子差不多,例子
TestA testA = new TestA(); OneClass oneClass = new OneClass(); Field testAField = oneClass.class.getDeclaredField("testA"); testAField.setAccessible(true); testA = testAField.get(oneClass, testA);
3.測試私有方法:例子
TestClass test= new TestClass(); Method method = // "方法名" 參數1.class 參數2.class TestClass .class.getDeclaredMethod("testMethod",Object1.class,Object2.class); method.setAccessible(true); // 類實例 參數實例1 參數實例2 ResultClass result = (ResultClass)method.invoke(test,object1,object2);