使用反射进行测试
根據(jù)我以前的帖子,我正在撰寫有關(guān)“單一責(zé)任原則”的演講。 我花了大部分時(shí)間。
同時(shí),我想分享一個(gè)示例代碼,說明如何在類中測試內(nèi)部字段。 我這樣做是為了進(jìn)行特殊的測試,這更多的是集成測試。 在依賴類的標(biāo)準(zhǔn)單元測試中,我正在使用依賴的模擬。
事實(shí)
一種方法是連接所有內(nèi)容,然后運(yùn)行某種形式的邏輯集成測試。 我不想這么做 這將使測試難以維護(hù)。
另一種方法是直接檢查接線。 為此,我正在使用反射。
以下是測試方法及其用法的示例代碼。 請注意,如果出現(xiàn)問題,我將如何捕獲異常并引發(fā)RuntimeException。 這樣,我就獲得了更干凈的測試代碼。
// Somewhere in a different utility class for testing@SuppressWarnings("unchecked")public static <T> T realObjectFromField(Class<?> clazz, String fieldName, Object object) {Field declaredField = accessibleField(clazz, fieldName);try {return (T) declaredField.get(object);} catch (IllegalArgumentException | IllegalAccessException e) {throw new RuntimeException(e);}}private static Field accessibleField(Class<?> clazz, String fieldName) {try {Field declaredField = clazz.getDeclaredField(fieldName);declaredField.setAccessible(true);return declaredField;} catch (NoSuchFieldException | SecurityException e) {throw new RuntimeException(e);}}// This is how we use it in a test methodimport static mypackage.ReflectionUtils.realObjectFromField;ItemFiltersMapperByFlag mapper = realObjectFromField(ItemsFilterExecutor.class, "filtersMapper", filterExecutor);assertNotNull("mapper is null. Check wiring", mapper); 參考: 《 學(xué)習(xí)與改進(jìn)》中的 JCG合作伙伴 Eyal Golan 作為Craftsman Developer博客使用“反射進(jìn)行測試” 。翻譯自: https://www.javacodegeeks.com/2014/02/using-reflection-for-testing.html
總結(jié)
- 上一篇: 怎么激活电话卡 激活电话卡的方法
- 下一篇: 拆家是什么意思 拆家解释