如何调用在单元测试中注入参数的方法?

联合会

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

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);
    }
}

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

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

我可以使该方法受保护,但是我对此感到不满意,因为我将更改该方法的可见性范围。

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

这使我得出的结论是,可以对该代码进行改进以使其更具可测试性。

无论如何,我是否需要更改此代码,以便提高可测试性,但仍会自动注入引用?

霍布斯FNM

只是继续使其成为“公共”或“受保护”即可。

您实际上并没有获得任何人以这种方式在实例化后更改集合的保护(您只是使它更加尴尬),因此,通过公开该方法不会损失任何东西(事实上,我认为您可以您的班级要好一些,因为比起让人们选择自己想要的结构,而不是强迫使用注入/反射来)。

如果您确实想完全防止实例化后的修改,那么无论如何您都必须转到一个“最终”变量,该变量具有不可修改的集合类型并更改为构造函数注入,但是我没有得到这样的印象是你想做的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从单元测试中注入模拟的Spring @Autowired依赖项的最佳方法是什么?

如何在mvcmock单元测试中注入身份验证

在对子类进行单元测试时,如何在抽象类中注入变量?

模拟豆无法在单元测试中注入依赖

Angular2在单元测试中注入ElementRef

如何参数化单元测试的测试方法

使用在 Task.Run 内调用的 Moq 方法进行单元测试

如何对调用 void 方法的方法进行单元测试?

运行单元测试时,验证对Func的调用(作为参数传递给注入接口时)

如何对__init __()函数中调用的方法进行单元测试?

如何在单元测试中调用公共静态方法

如何在DRF单元测试中跳过方法调用?

如何对带有枚举参数的方法进行单元测试?

如何对无参数的void方法进行单元测试

如何对使用Part类型参数的方法进行单元测试?

如何使用在方法中具有依赖项的moq来对类进行单元测试?

调用异步方法的方法的单元测试

如何通过更改引用传递的参数来对调用具有副作用的函数的方法进行单元测试?

单元测试动态方法调用Angular

单元测试不要调用viewDidAppear方法

如何对Ajax调用进行单元测试

在单元测试之前,如何等待异步调用在组件的安装回调中完成?

如何编写带参数的单元测试?

单元测试初始化类不调用参数,如何将参数传入类?

骆驼单元测试-我们如何编写单元测试来断言调用了bean的特定方法?

在 Angular 单元测试中注入时找不到提供程序?

在Angular 2的构造函数中注入了Router的麻烦的单元测试服务

在 Ionic 服务的单元测试中注入 <Platform> 时抛出的错误

Angular Karma单元测试:如何在业力配置中而不是在所有测试规范中注入模拟服务