【问题标题】:How to test dependency injection with annotations?如何使用注释测试依赖注入?
【发布时间】:2021-04-28 15:10:34
【问题描述】:

在 Spring Framework 或 Java EE 中有基于注解的依赖注入。

通常你会这样做

class X
{
    Y var;

    public X(Y var)
    {
       this.var = var
    }
}

这很容易测试和模拟。您只需为您的测试实例化类 Y。

但是这个怎么样。

class X
{
    @Inject or @Autowired
    Y var;

    public X( )
    {

    }
}

基于注解的依赖注入怎么样。 您遇到与硬编码实例化相同的问题。 我无法像在第一个代码示例中那样注入模拟对象。我该如何测试它?

【问题讨论】:

  • 嗯...通过重构代码使其易于测试?这正是构造函数注入是推荐做法的原因

标签: java spring dependency-injection


【解决方案1】:

我无法像在 第一个代码示例

这是为什么呢?

@Component
class X {
    Y var;

    @Autowired
    public X(Y var)
    {
       this.var = var
    }


   @Component
   class Y {
  
   }

然后

@RunWith(SpringRunner.class)
public class ApiControllerTest {
 
    @Autowired
    private X x;
 
    @Configuration
    static class Config {
 
        @MockBean
        private Y y;
    }
}

【讨论】:

  • 现在唯一的方法是反射。据我了解,使用 Mockito 等其他框架
  • 你的意思是如何在没有弹簧和注释的情况下进行依赖注入?因为您说带有注释的依赖注入。这些注释来自 spring 本身,例如您拥有的 @Autowired
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多