gpt4 book ai didi

java - 如何在单元测试中调用注入(inject)参数的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:40 25 4
gpt4 key购买 nike

有一种模式在我当前的项目中被广泛使用:

private Collection<Converter<T>> converters = new HashSet<>();

@Inject
private void init(@Any Instance<Converter<T>> converters) {
for (Converter<T> converter : converters) {
this.converters.add(converter);
}
}

这样我就可以创建任意数量的转换器,它们会自动注入(inject)到我的 bean 中。

我现在的问题是测试:我的代码中使用了转换器集合,但 Junit 没有调用 init(..) 方法,我需要调用它来设置模拟转换器.

我可以使该方法 protected ,但我觉得这样做不好,因为我会更改该方法的可见性范围。

我也可以使用反射调用该方法,但这也感觉不对。

这使我得出结论,可以改进此代码以使其更易于测试。

我是否更改了此代码以提高可测试性,但仍会自动注入(inject)引用?

最佳答案

只需将其设置为“公开”或“ protected ”即可。

您实际上并没有从以这种方式更改集合后实例化的人那里获得任何保护(您只是让它变得有点尴尬),所以您不会通过公开该方法而失去任何东西(事实上我会争论你让你的类(class)稍微好一点,因为你让人们选择他们想要的构建方式,而不是强制使用注入(inject)/反射)。

如果您确实想完全防止实例化后修改,那么无论如何您都必须转到“最终”变量,使用不可修改的集合类型并更改为构造函数注入(inject),但我不明白这就是你想要做的事情的印象。

关于java - 如何在单元测试中调用注入(inject)参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com