2016-08-21 3 views
-1

私はいくつかのチュートリアルとマニュアルを読んでいますが、実際に必要な部分はスキップします。テストでAssistedInjectを使用する

私のシナリオは次のとおりです。

私はConnectionインタフェースがあります。私は、

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

今:私はSocketFactoryを必要とする生産の実装を持って

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

を:

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

だから私はConnectionFactoryを作成SocketFactoryの2つの実装を持っています:SocketFactoryProdおよびSocketFactoryTestである。

私はConnectionのテストを作成しています。ConnectionImplSocketFactoryTestで作成したいと思います。私は実際にどのように正確に行うのか分かりません。これは私が欠けている部分、私がテスト(またはテストクラス)で書くべきことです。

+1

あなたはユニットテストをしようとしていますか?単体テストのドラフト版を投稿してください。 –

+0

@ SergeyBrunov彼はユニットテストではないと言った。おそらく機能テストや統合テストで、彼は代替ネットワークにバインドしようとしています。 – Gene

+0

私はConnectionをテストしようとしていますが、私は接続ファクトリを使用してテストして接続を試みたいと思います。だから私は、使用するSocketFactoryがSocketFactoryTest.classであるconnectionsFactory(テストクラスのメンバ)であることを伝えるコードを書く必要があることを理解しようとしています。 – slashms

答えて

0

あなたはGuiceのモジュールであなたのインターフェイスにバインドするものを選択:

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

私はそれが欠けていると感じています。コネクションファクトリではなく@InjectFunctionoryを期待します。そして、それは私が欠けているものです。 – slashms

+0

ああ、謝罪、私はこれを急いで書きました。接続ではなくConnectionsFactoryを注入する必要があります。一定。 – JadN

関連する問題