繁体   English   中英

私有变量是 null,在 spring 引导 junit 案例中使用 @Value 分配

[英]private variables are null that are assigned using @Value in spring boot junit case

我有以下 java class ,我必须为此编写 junit 测试。

@Service
class My {
    @Value("${emp.name}")
    private String name;

    public void printName() {
        StringBuilder sb = new StringBuilder(name);
        //do some stuff
    }
}

现在我正在为此 java class 编写一个测试 class ,如下所示。

@PrepareforTest({My.class})
public class MyTest {
   @InjectMocks
   My my;

   @Test
   public void printNameTest() {
       //Test code
   }
}

这里的问题是我在StringBuilder sb = new StringBuilder(name); 上得到 null 指针异常; 测试正在中断。

任何人都知道如何使用 @Value 在测试中加载属性值或将值传递给实例。 我尝试使用反射,但它也给出了错误。

不要使用字段注入,而是在构造函数中传递它。 使测试更容易。

@Service
class My {

    private String name;

    public My(@Value("${emp.name}") String name) {
        this.name = name;
    }

    public void printName() {
        StringBuilder sb = new StringBuilder(name);
        //do some stuff
    }

}

或者,使用 ReflectionTestUtils。 请参阅: https://stackoverflow.com/a/17355595/2082699

没有注释告诉 Mockito @InjectMocks 只注入该值而不执行任何 mocking 或间谍活动。

所以你有两个选择:

  1. 要么自动连接我的 class,然后让我们通过 springboot 处理所有事情。
  2. 或模拟 printName() 响应

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM