使用反射进行测试
根據我以前的帖子,我正在撰寫有關“單一責任原則”的演講。 我花了大部分時間。
同時,我想分享一個示例代碼,說明如何在類中測試內部字段。 我這樣做是為了進行特殊的測試,這更多的是集成測試。 在依賴類的標準單元測試中,我正在使用依賴的模擬。
事實
一種方法是連接所有內容,然后運行某種形式的邏輯集成測試。 我不想這么做 這將使測試難以維護。
另一種方法是直接檢查接線。 為此,我正在使用反射。
以下是測試方法及其用法的示例代碼。 請注意,如果出現問題,我將如何捕獲異常并引發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); 參考: 《 學習與改進》中的 JCG合作伙伴 Eyal Golan 作為Craftsman Developer博客使用“反射進行測試” 。翻譯自: https://www.javacodegeeks.com/2014/02/using-reflection-for-testing.html
總結
- 上一篇: 怎么激活电话卡 激活电话卡的方法
- 下一篇: 合成和桥接方法