2017-05-10 7 views
1

ich ein anwendungsspezifisches Modul haben die DynamoDBMapper und eine weitere Klasse Anwendung konfigurieren, die auf diesem Mapper setztMocking Guice erstellte Objekte

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()); 
    } 

}

Jetzt

, möchte ich Unit-Tests und in der Einheit tun Testen möchte ich eine Mocked Objekt OrderManager bekommen.

Ich versuchte

@Mock 
private DynamoDBMapper mockDynamoDBMapper; 

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

tun und ich habe Fehler, die ich mit null Objekte nicht instanziieren. Was wäre der beste Weg, um dieses Problem zu umgehen? Ich nehme an, dass ich es falsch angehen würde.

Antwort

0

Sie müssen sicherstellen, dass der Injektor nach dem Schein erstellt wird. Anstatt die @Mock Annotation zu verwenden, würde ich eine Methode wie erstellen:

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

    Injector injector = // ... 
}