使用反射进行测试

根据我以前的帖子,我正在撰写有关“单一责任原则”的演讲。 我花了大部分时间。

同时,我想分享一个示例代码,说明如何在类中测试内部字段。 我这样做是为了进行特殊的测试,这更多的是集成测试。 在依赖类的标准单元测试中,我正在使用依赖的模拟。

事实


  1. 所有字段(以及我们类中的依赖项都是私有的
  2. 该类没有依赖项的获取器
  3. 我们使用Spring(XML上下文)进行连接
  4. 我想验证依赖接口A是否正确连接到依赖类B

一种方法是连接所有内容,然后运行某种形式的逻辑集成测试。 我不想这么做 这将使测试难以维护。

另一种方法是直接检查接线。 为此,我正在使用反射。

以下是测试方法及其用法的示例代码。 请注意,如果出现问题,我将如何捕获异常并引发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 method
	import static mypackage.ReflectionUtils.realObjectFromField;
	
	ItemFiltersMapperByFlag mapper = realObjectFromField(ItemsFilterExecutor.class, "filtersMapper", filterExecutor);
	assertNotNull("mapper is null. Check wiring", mapper);


翻译自: https://www.javacodegeeks.com/2014/02/using-reflection-for-testing.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值