Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟对象返回null_Java_Mockito - Fatal编程技术网

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?