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

2022-09-03 00:13:54

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

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

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

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

感谢任何帮助。


答案 1

没有。PostConstruct是一个Spring概念。但是没有什么可以禁止您在设置方法中调用它:

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

答案 2

我通过用@PostConstruct标记的类的构造函数替换标记为@Inject的方法解决了这个问题。这两种解决方案都执行相同的操作,并且由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() {
            ...

推荐