2016-08-25 9 views
0

Как проверить класс, который зависит от Provider<>? См. Приведенный ниже код.Испытательный класс, который зависит от поставщика Guice <T>

class ToTest { 

    @Inject 
    Provider<Processor> processorProvider; 

    public buildData() { 
     processorProvider.get().process(); 
    } 

    class ProcessorProviderImpl implements Provider<Processor> { 
     @Inject 
     private Handler someHandler; 

     public Processor get() { 
      return new MyProcessor(somehandler) 
     } 
    } 

    public static class TestModule extends JukitoModule { 
     @Override 
     protected void configureTest() { 
      bind(Processor.class).toProvider(
        ProcessorInstanceProviderImpl.class); 
      bindMock(SubHandler.class).in(TestSingleton.class); 
     } 
    } 

    class Handler { 
     @Inject 
     private SubHandler subHandler; // this is singleton instance 
    } 
} 

Так что, когда я издеваться subHandler это не работает, и когда я бегу модульного тестирования я получаю NullPointerException где subHandler.handle() становится называется.

+0

Возможный дубликат [Что такое лучший способ использовать Guice и JMock вместе?] (Http://stackoverflow.com/questions/2044991/what-is-the-best-way -to-use-guice-and-jmock-together) –

ответ

2

Вы можете использовать Providers.of() для инициализации процессораProvider с поставщиком вашего экземпляра соавтора.

https://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/util/Providers.html

test = new ToTest(); 
test.processorProvider = Providers.of(processorMock); 
+0

Извините, я перефразировал мой вопрос. Что делать, если я не хочу издеваться над поставщиком экземпляров, но зависит от его зависимости. – sidss

+1

И почему вы не хотите издеваться над сотрудником! Вы должны издеваться над этим, это не очень хорошая идея использовать реальный объект. И если вы хотите издеваться над «зависимостью от своей зависимости», возможно, существует плохая конструкция: вы нарушаете Закон Деметры https://en.wikipedia.org/wiki/Law_of_Demeter – frhack