首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@InjectMocks导致NPE

@InjectMocks导致NPE
EN

Stack Overflow用户
提问于 2017-07-08 16:33:04
回答 1查看 617关注 0票数 0

我有下面的ApplicationConfiguration

代码语言:javascript
复制
class ApplicationConfiguration {
    private SQSConfig SQSConfig;
    // Other configs and getters/setters
}

那我在我的Application

代码语言:javascript
复制
class Application {
   private Dequeuer dequeuer;

   public void run(ApplicationConfiguration config) {
       // I need to pass ApplicationConfiguration because there are other variables that I need to use
      dequeuer = new Dequeuer(config);
      // Start dequeuer
   }
}

所以在我对Application的测试中,我想使用@InjectMethod作为Dequeuer

代码语言:javascript
复制
class ApplicationTest {
    @Mock
    private ApplicationConfig config;
    @Mock
    private SQSConfig sqsConfig;
    @InjectMocks
    private Dequeuer dequeuer = new Dequeuer(config);

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        when(config.getSQSConfig()).thenReturn(sqsConfig);
    }
}

问题是,@InjectMethod是在when之前初始化的,所以我得到了一个NPE。我做什么好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-08 16:38:58

问题是,@InjectMethod是在时间之前初始化的,所以我得到了一个NPE。我做什么好?

MockitoAnnotations.initMocks(this)确实会首先创建模拟,这就是它应该工作的方式。在实例化模拟之前,不记录模拟行为。

另外,它不是@InjectMock,而是@InjectMocks

而且你没有正确地使用它。

不要将参数传递给构造函数,如果您的Dequeuer类声明了一个Dequeuer(ApplicationConfig appConfig)构造函数,它将由Mockito框架直接注入:

代码语言:javascript
复制
@Mock
private ApplicationConfig config;
...
@InjectMocks
private Dequeuer dequeuer;

NPE可能是由于对Mockito框架的错误使用造成的,但是在您的问题中显示的代码很难识别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44988402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档