我正在嘲笑这样的对象:
@InjectMocks
private AuroraRepoImpl auroraRepo;
@Mock
private Connector4AuroraDB connector4AuroraDB;
AuroraRepoImpl
是类,connector4AuroraDB
是我需要模拟的对象。
但是当呼叫转到connector4AuroraDB
时,而不是被模拟而是返回null
。
使用方法如下:
Connection connection = connector4AuroraDB.openConnection();
它正在抛出NullPointerException
。
知道如何模拟吗?
答案 0 :(得分:1)
从注释中可以看出,Connector4AuroraDB
由Spring(@Autowired
)自动装配。
在我看来,您正在使用字段注入,这使得很难进行存根依赖。
我认为您有类似的东西:
public class AuroraRepoImpl {
@Autowired private Connector4AuroraDB connector4AuroraDB;
}
要使其正常工作,您需要一个Spring上下文设置,以便Spring可以调查bean注册表以找到依赖项。
您的示例是使用MockitoJUnitRunner
运行的简单单元测试。
您应该更改实现以使用构造函数注入,这样Mockito可以注入依赖项:
public class AuroraRepoImpl {
private final Connector4AuroraDB connector;
@Autowired
public AuroraRepoImpl(final Connector4AuroraDB connector) {
this.connector = connector;
}
}
如果您使用新的Spring版本,并且该类只有一个构造函数,甚至可以省略@Autowired
注释。