2016-08-21 37 views
-1

我閱讀了幾個教程和手冊,但它們都跳過了我實際需要的部分,這是您運行這些東西的實際部分。在測試中使用AssistedInject

我的場景如下。

我有一個Connection接口:

public interface Connection { 
    void open(Selector selector); 
    void send(NetMessage message); 
} 

我有一個生產的實現,需要一個SocketFactory

public class ConnectionImpl implements Connection { 
    // members 
    @Inject 
    public ConnectionImpl(@Assisted SecurityMode securityMode, @Assisted long connectionId, 
          @Assisted EntityAddresses addresses, SocketFactory socketFactory) 

所以我創建了一個ConnectionFactory

public interface ConnectionFactory { 
    SioConnection create(SecurityMode securityMode, long connectionId, EntityAddresses addresses); 
} 

現在,我有兩個實現SocketFactorySocketFactoryProdSocketFactoryTest

我正在爲Connection創建一個測試,我想創建一個ConnectionImplSocketFactoryTest,我真的不明白我是如何做到的。這是我不斷失蹤的部分,我應該在我的測試中寫下(或在測試類setUp)。

+1

你想要單元測試哪一個類?你能否發表單元測試的草稿版本? –

+0

@SergeyBrunov他沒有說這是一個單元測試。這可能是一個功能或集成測試,他試圖綁定一個備用網絡。 – Gene

+0

我想測試連接,但我想使用一個connectionFactory來創建連接,我嘗試測試和@注入它。所以我想了解我應該寫什麼(以及在哪裏)告訴connectionFactory(它是測試類中的成員)使用SocketFactory的代碼是SocketFactoryTest.class – slashms

回答

0

您選擇在吉斯模塊綁定到你的接口是什麼:

public class MyTest { 

    @Inject 
    private ConnectionFactory connectionFactory; 

    @Before 
    public void setUp() { 
     Injector injector = Guice.createInjector(
       <your modules here>, 
       new AbstractModule() { 
        @Override 
        protected void configure() { 
         install(new FactoryModuleBuilder() 
           .implement(Connection.class, ConnectionImpl.class) 
           .build(ConnectionFactory.class)); 
         bind(SocketFactory.class).to(SocketFactoryTest.class); 
        } 
       } 
     ); 
     injector.injectMembers(this); 
    } 
} 

如果你想從您的生產模塊中的一個重寫的SocketFactory的現有綁定,你可以這樣做:

public class MyTest { 

    @Inject 
    private ConnectionFactory connectionFactory; 

    @Before 
    public void setUp() { 
     Injector injector = Guice.createInjector(
       Modules.override(
        <your modules here. Somewhere the 
        FactoryModuleBuilder is installed here too> 
       ).with(
        new AbstractModule() { 
         @Override 
         protected void configure() { 
          bind(SocketFactory.class).to(SocketFactoryTest.class); 
         } 
        } 
       ) 
     ); 
     injector.injectMembers(this); 
    } 
} 
+0

我覺得它缺少重點。我期望@注入ConnectionsFactory而不是連接。這就是我想念的。 – slashms

+0

啊,是的,道歉,我急急地寫了這個。您應該注入ConnectionsFactory而不是Connection。固定。 – JadN