首页 > 解决方案 > 如何配置测试套件始终将常量注入到所有类实例的@value私有字段中

问题描述

我们继承了一组测试最少的大型代码。我正在寻找更新和创建测试。

我们有一个简单的 bean,它有一个使用 @value 注入常量的私有字段。这个 bean 是由许多使用私有 @value 的代码构建和传递的。我想设置一个测试套件,以始终将一些常量注入到任何实例化版本的 bean 的 @value 中。

我知道如何将 @value 注入单个 bean,但考虑到 bean 在我的测试中被 spy 实例化的频率,我不想在每种情况下都注入模拟并将 @value 注入该模拟,我宁愿在课堂上这样做。

我知道在私有变量上滥用 @value 是不好的。我们希望在某个时候解决这个问题,但是在这一点上,如果我可以避免的话,我不想为一个无法测试的庞然大物的类的复杂数量的构造函数搞乱。我现在想要一种在私有字段上测试@value 的方法,一旦我们拥有更稳定/可测试的代码库,我将考虑稍后如何使用@value。

我可以配置这个注入,让它自动发生在类的所有实例化实例上吗?

标签: javaspringunit-testingmockito

解决方案


创建一个包含您的正常配置的自定义测试配置,并将间谍定义为其中的 bean,并在其中使用 @Primary 并注入自定义 @Value 值。您可以将其作为类文件直接包含在您的测试文件夹中。这样,在 spring 上下文自动装配的任何地方,它都会从测试配置中获取一个,而不是在您的正常上下文中定义的那个。


推荐阅读