Java 模拟对象返回null
我在模仿这样一个物体:Java 模拟对象返回null,java,mockito,Java,Mockito,我在模仿这样一个物体: @InjectMocks private AuroraRepoImpl auroraRepo; @Mock private Connector4AuroraDB connector4AuroraDB; AuroraRepoImpl是类,connector4AuroraDB是我需要模拟的对象。 但是当调用转到连接器4auroradb时,它返回的不是mock而是null 这就是它的使用方式: Connection connection =
@InjectMocks
private AuroraRepoImpl auroraRepo;
@Mock
private Connector4AuroraDB connector4AuroraDB;
AuroraRepoImpl
是类,connector4AuroraDB
是我需要模拟的对象。
但是当调用转到连接器4auroradb
时,它返回的不是mock而是null
这就是它的使用方式:
Connection connection = connector4AuroraDB.openConnection();
它正在抛出NullPointerException
。
你知道如何模仿吗?从你的评论中可以看出,
连接器4AuroRaDB
是由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
注释。是否使用了@RunWith(MockitoJUnitRunner.class)?是否在设置方法中调用MockitoAnnotations.injectMocks(this)
?是否初始化mock?通过使用@RunWith(MockitoJUnitRunner.class)
或MockitoAnnotations.initMocks(this)
?我正在使用MockitoAnnotations.injectMocks(this)在@before方法“It is throwing null pointer exception”中,它在代码的哪个点抛出NPE?