0

現在、JSF Web アプリケーションの JUnit テストに Guice を使用しています。いくつかのクラスがあるとします:

class ServiceA
{
   @Inject
   ServiceB serviceB;
   //do something using serviceB
   ...
}

interface ServiceB
{
//APIs in ServiceB
...
}

class ServiceBImpl implements ServiceB
{
   @Inject
   ServiceC serviceC;
   //do something using serviceC
   ...
}

interface ServiceC
{
//APIs in ServiceC
...
}

class ServiceCImpl implements ServiceC
{
   //do something
   ...
}

ここで、Guice を使用してServiceAのモジュールを作成します。私のモジュールは次のようになります

class ServiceAModule implements Module
{
    @Override
    public void configure(Binder binder) {
    binder.bind(ServiceB.class).to(ServiceBImpl.class);
    }
}

そして、私の JUnit テスト クラスでは、Guice を使用してインジェクションを作成します。これは次のようになります。

public ServiceATest
{

    ServiceA serviceA;

    @Before
    public void before()
    {
       Injector injector = Guice.createInjector(new ServiceAModule());
       serviceA = injector.getInstance(ServiceA.class);
    }

    //do the test
    ...
}

ここでの問題は、ServiceATest が「ServiceC」について何も知らないことであり、ServiceB に注入されません。

もちろん、ServiceC のインジェクションを ServiceB に導入する別のモジュールを作成することもできます。しかし、これは確かにコードの階層化を壊します。ServiceC が別の人によって開発され、私が ServiceC について何も知らない場合はどうなりますか? これは良い解決策ではありません。

Guice でこのような多層インジェクションを処理することは可能ですか?

4

1 に答える 1