spring - WebMvcTest 太贪心了
问题描述
我想WebMvcTest
在我的 Spring Boot 应用程序中为单个控制器编写一个测试。除其他外,我的应用程序中有一些自定义Converters
。尽管我想测试的这个特定控制器不需要它们,但 Spring 无论如何都会尝试创建它们。
WebMvcTest
现在的问题是:那些自定义转换器需要我的应用程序中没有被测试片初始化的更多bean 。并且不想模拟与特定测试完全无关的数十个 bean。除了在 中手动指定它们之外,从特定测试excludeFilters
中排除某些 Web 组件的最佳实践是什么?WebMvcTest
解决方案
您可以使用自定义排除过滤器以避免将转换器加载到应用程序上下文中:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = YourController.class, excludeFilters = @ComponentScan.Filter(type = CUSTOM, classes = NoConvertersFilter.class))
public class YourControllerTest {
...
}
class NoConvertersFilter extends TypeExcludeFilter {
private static final String CONVERTER_INTERFACE_NAME = Converter.class.getName();
@Override
public boolean match(@NonNull final MetadataReader metadataReader, @NonNull final MetadataReaderFactory metadataReaderFactory) throws IOException {
return Arrays.asList(metadataReader.getClassMetadata().getInterfaceNames()).contains(CONVERTER_INTERFACE_NAME);
}
}
使用这种方法,您只需将 excludeFilter 添加到您不想加载转换器的那些控制器中。如果添加了新转换器,请不要担心:只要它实现了转换器接口,它就会被自动排除。
推荐阅读
- python - Python海龟变色和填充
- vba - 有没有办法让 Word 在运行时在 UFT 之上使用 VBA?
- python - 如何修复加密字符串的函数中的“字符串索引超出范围”错误
- r - 在 r 中创建圆形/同心二部图
- regex - 正则表达式删除第一部分和可选的最后一部分
- node.js -
TypeError:promisify 不是函数 - ruby-on-rails - 如何在 ruby on rails 中检查登录功能是否有效?
- python - 有没有办法用 Pandas 的字典将分类变量转换为虚拟变量?
- java - java.lang.NoClassDefFoundError: org/apache/avro/LogicalType 同时读取 Parquet
- excel - 如何让 Excel 在没有手动查找的情况下识别日期并将“/”替换为“/”?