【问题标题】:@PostConstruct not called when using MockitoAnnotations使用 MockitoAnnotations 时未调用 @PostConstruct
【发布时间】:2015-05-21 01:23:07
【问题描述】:
@RunWith(MockitoJUnitRunner.class)
public class TestMail{    
    @Autowired(required = true)
    SomeFactory someFactory;
    private @Mock MailService mailService;
    private @Captor ArgumentCaptor<List<MailList>> mailListCaptor;
    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
    }  
    @PostConstruct
    public void init() throws Exception {
            logger.info("someFactory {}", someFactory);
    }
}

这是示例代码。在使用 mockito 或 @Beofre 注释之前,一切似乎都很好。现在它正确地模拟了对象,但 someFactory 没有正确自动装配。

在 Mockito 之前一切正常。

【问题讨论】:

  • 您认为应该由谁/什么负责执行@PostConstruct 方法或注入@Autowired 字段?
  • ApplicationContext.xml,Spring 负责从 context.xml 中自动装配对象。
  • 只要回答我的问题:您为什么希望 Spring 参与您的测试? @Autowired@PostConstruct 只是注释
  • 您的测试由MockitoJUnitRunner 运行。这里不涉及 Spring。
  • 查看SpringJUnit4ClassRunner

标签: java spring mocking mockito autowired


【解决方案1】:

如果您希望将 SomeFactory 的依赖项注入其中,请使用 @InjectMocks 注释。

http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/InjectMocks.html

也请参考Mockito: Inject real objects into private @Autowired fields

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 2015-05-01
    • 2012-12-18
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多