java - 使用私有(private)构造函数对 spring 组件进行单元测试,无需注入(inject)

标签 java spring spring-boot junit mockito

我有一个使用 @Component 注释的类,使用 private 构造函数注入(inject),以及用于嵌套注入(inject)的 @Autowired 注释 setter。

为了对其进行单元测试,a workaround I found是使用 @SpringBootTest@DirtiesContext 注释来创建带有注入(inject)组件的 Spring 上下文来测试并在每次测试后“重新连接”它。

但是,我想在没有上下文的情况下对该组件进行单元测试(以避免在每次测试之前都必须构建所有上下文)。

我可以毫无问题地模拟每个嵌套注入(inject)(因为我只想在这里测试 Controller )。

因此我的问题是:如何“获取”该组件的实例?我怎样才能在每次测试前重置它?然后我应该如何获得我的模拟嵌套注入(inject)(我会 - 我猜 - 通过我的 setter “注入(inject)”)?

最佳答案

不要使用私有(private)构造函数。拥有私有(private)构造函数然后使用反射仍然只从外部调用它没有任何好处。如果类只有静态成员以更清楚地表明该类不打算被实例化,或者如果您在同一个类中使用静态工厂方法来创建实例,则您应该只使用私有(private)构造函数。

关于java - 使用私有(private)构造函数对 spring 组件进行单元测试,无需注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58487918/

相关文章:

java - 如何使用 MySQL 和 Hibernate 设置 group_concat_max_len

java - 当接口(interface)作为参数给出时,依赖注入(inject)不起作用

Java Android 谷歌地图。仅显示网格

java - 在 ViewPager 中,我的 Fragment 的适配器是这样的。我希望它是一个数组列表

spring - 使用 Java 10 的 Gradle(即使未导出包,Spring 也能够扫描模块类)

spring - Spring Boot 安全中的 HTTP 403 禁止错误

java - Spring Data Rest 重写嵌套属性 POST 处理程序

java - 在进行批量更新时,PostUpdate Hook 不起作用

java - 为什么getResource返回null

Java:用索引处字符串中的子字符串替换特定字符