java - Mockito 中的 Spring @Value 字段注入(inject)

标签 java spring junit mockito

@Service
public class MyClass {

...

  @Autowired
  public MyClass(@Value("${my.value}") String myValue)  {
      ...
  }

...
}

我的测试课:

public class MyTest {

    @Mock(name = "solrServer")
    private SolrServer solrServer;

    @InjectMocks
    private MyClass myClassMock;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    ....
}

我有一个异常(exception),如下:

org.mockito.exceptions.base.MockitoException: Cannot instantiate @InjectMocks field named 'myClassMock' of type 'class mypackage.MyClass'. You haven't provided the instance at field declaration so I tried to construct the instance. However the constructor or the initialization block threw an exception : null

at mypackage.MyTest.setUp(MyTest.java:46) ... Caused by: java.lang.NullPointerException ...

如何从 MyTest 类注入(inject) @Value 字段并修复它?

最佳答案

您可以通过手动创建类的实例,在 @Before 带注释的方法中完成此操作,如下所示:

public class MyTest {

    @Mock(name = "solrServer")
    private SolrServer solrServer;

    @InjectMocks
    private MyClass myClassMock;

    @Before
    public void setUp() {
        myClassMock = new MyClass("value you need");
        MockitoAnnotations.initMocks(this);
    }

    @Test
    ....

}

关于java - Mockito 中的 Spring @Value 字段注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37609933/

相关文章:

java - android中的透明 View

java - JSR 303 Bean 验证 : The Constraint composition with groups for each composited constraint

java - 在 Iterable 上查找元素

java - 计算 Arraylist 中具有特定属性的项目

java - 将 session 与 DynamoDB 结合使用

java - 哪个先加载?静态 block 还是 spring bean?

spring-boot - 使用 Mockito 模拟带有 @Transactional 方法的类

java - org.hibernate.hql.internal.ast.QuerySyntaxException : Hibernate not able to map table name

java - 自动验证数百个独立 Java 程序的最佳方法是什么?

java - 如何使用 SOAPUI 获取 JUNIT 的响应