Java 模拟Guice提供的对象

Java 模拟Guice提供的对象,java,unit-testing,mockito,amazon-dynamodb,Java,Unit Testing,Mockito,Amazon Dynamodb,我有一个特定于应用程序的模块,它是configureDynamoDBMapper,另一类应用程序依赖于该映射器 public class ProjectAppServiceModule extends AbstractModule { @Override protected void configure() { } @Provides @Singleton public AmazonDynamoDB getAmazonDynamoDBClient() { retu

我有一个特定于应用程序的模块,它是configure
DynamoDBMapper
,另一类应用程序依赖于该映射器

public class ProjectAppServiceModule extends AbstractModule {

  @Override protected void configure() {
  }

  @Provides
  @Singleton
  public AmazonDynamoDB getAmazonDynamoDBClient() {
    return AmazonDynamoDBClientBuilder
            .standard()
            .withCredentials(new EnvironmentVariableCredentialsProvider())
            .build();
  }

  @Provides
  @Singleton
  public DynamoDBMapper getDynamoDBMapper() {
    return new DynamoDBMapper(getAmazonDynamoDBClient());
  }

  @Provides
  @Singleton
  public OrdersManager getOrdersManager() {
    return new OrdersManager(getDynamoDBMapper());
  }
}

现在,我想做单元测试,在单元测试中,我想得到一个模拟对象
OrderManager

我试过了

@Mock
private DynamoDBMapper mockDynamoDBMapper;

Injector injector = createInjector(new AbstractModule() {
    @Override
    protected void configure() {
        bind(DynamoDBMapper.class).toInstance(mockDynamoDBMapper)
       bind(OrdersManager.class).toInstance(mockOrdersManager);
    }
});

我得到了一个错误,我不能用空对象实例化。有什么更好的办法来解决这个问题?我猜是走错了路

您需要确保喷油器是在模拟之后创建的。我不使用
@Mock
注释,而是创建如下方法:

@Before
public void before() {
    DynamoDBMapper mockDynamoDBMapper = mock(DynamoDBMapper.class);

    Injector injector = // ...
}

您需要确保喷油器是在模拟之后创建的。我不使用
@Mock
注释,而是创建如下方法:

@Before
public void before() {
    DynamoDBMapper mockDynamoDBMapper = mock(DynamoDBMapper.class);

    Injector injector = // ...
}