使用Mockito @Spy注释时未调用@PostConstruct

时间:2014-02-22 17:41:42

标签: java spring annotations mockito

我正在使用Spring,TestNG和Mockito框架。我正在为类 A 编写单元测试,该类依赖于类 B 。类 B 有一个用@PostConstruct注释的方法。

在使用TestNG为类 A 编写单元测试用例时,我在测试类中使用Mockito @Spy注释类 B 的实例。我可以看到Mockito正确创建 B 的实例。但是当Mockito正在处理@PostConstruct注释时,为什么 @Spy代码不会被称为

所以,我所做的是将@PostConstruct内的代码移动到构造函数

有没有办法让Mockito在处理@Spy注释时执行任何'后处理'方法?

感谢您的任何帮助。

2 个答案:

答案 0 :(得分:22)

不,没有。 PostConstruct是一个Spring概念。但没有什么禁止你在你的设置方法中调用它:

@Before
public void prepare() {
    MockitoAnnotations.initMocks(this);
    this.b.postConstruct();
}

答案 1 :(得分:0)

我通过用标为@Inject的类的构造函数替换标为@PostConstruct的方法来解决了这个问题。 两种解决方案都一样,并且受Mockito支持。 有必要提出依赖性:

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>

之前:

@Service
    public class AddressMapper extends CommonMapper {   
        @PostConstruct
        private void init() {
            ....

之后:

@Service
    public class AddressMapper extends CommonMapper {
        @Inject
        public AddressMapper() {
            ...