我正在使用Spring,TestNG和Mockito框架。我正在为类 A 编写单元测试,该类依赖于类 B 。类 B 有一个用@PostConstruct
注释的方法。
在使用TestNG为类 A 编写单元测试用例时,我在测试类中使用Mockito @Spy
注释类 B 的实例。我可以看到Mockito正确创建 B 的实例。但是当Mockito正在处理@PostConstruct
注释时,为什么 @Spy
代码不会被称为?
所以,我所做的是将@PostConstruct
内的代码移动到构造函数。
有没有办法让Mockito在处理@Spy
注释时执行任何'后处理'方法?
感谢您的任何帮助。
答案 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() {
...