2017-06-30 9 views
1

私のクラスで、私のアプリケーションが実行されているOSGIコンテナによって初期化されているプラ​​イベートフィールドをモックしようとしています。私は、この上の任意の手掛かりを参照するためのサンプルコードをしてください入れている:OSGI Felixコンテナによってモックプライベートフィールドが初期化されています

ここ
import org.apache.felix.scr.annotations.* 
@Component (name = "MyServiceImpl ", ds = true, immediate = true) 
@Service 
public class MyServiceImpl extends MyBasee implements MyService { 

    @Reference (name = "MyOtherService", bind = "bind", unbind = "unbind", policy = ReferencePolicy.STATIC) 
    private MyOtherService myServiceRegistryConsumer; 
} 

私はあなたがモックと@InjectMocks注釈を使用してフィールドを挿入することができますMockitoでプライベートフィールドにMyOtherService myServiceRegistryConsumer

答えて

2

を模擬しようとしています。

@RunWith(MockitoJUnitRunner.class) 
public class AppTest { 

    @Mock 
    private MyOtherService myServiceRegistryConsumer; 

    @InjectMocks 
    private MyServiceImpl myServiceImpl; 

    @Test 
    public void testSomething() { 
     // e.g. define behavior for the injected field 
     when(myServiceRegistryConsumer.methodA()).thenReturn(/* mocked return value */); 
    } 
} 
+0

私はより明確に私の質問を編集しました。このようにして私はプライベートフィールドmyServiceRegistryConsumerを制御することはできません。 MyServiceImplではなく、MyOtherServiceオブジェクトを注入/モックすることは望ましくありません。これは、コンテナによってインスタンス化されています。 – Arun

+0

@Arun 'myServiceImpl'はここで模擬ではありません。 Mockitoは 'myServiceRegistryConsumer'をモックしてインスタンスに注入します。テストメソッドではまだモックを完全に制御でき、そのモックの動作を定義することができます。 –

+0

はい、あなたの説明どおりに動作します。どうもありがとう :) – Arun

関連する問題