2017-08-04 22 views
0

私のコードに2 constructorがあります。 1つはデフォルトコンストラクタ(argsなし)で、もう1つはパラメータ化されたコンストラクタです。なぜMockitoを使ってパラメータ化されたコンストラクタのスパイを作成できないのですか

私は、私のjunitの依存としてモックオブジェクトを注入するために、パラメータ化されたコンストラクタをスパイする必要があります。

public RegDao(){ 
//original object instantiation here 
Notification .... 
EntryService ..... 
} 

public RegDao(Notification notification , EntryService entry) { 
// initialize here 
} 

we have something like below : 
RegDao dao = Mockito.spy(RegDao.class); 

私はコンストラクタに擬似オブジェクトを挿入してスパイすることができますか?

答えて

0

依存性注入ソリューションがない可能性があります。 MockitoはあなたのDIと協力してモックを注入するのに最適です。たとえば、CDIを使用してNotificationEntryServiceのメンバーに@Injectの注釈を付けることができます。テストでは両方とも@Mockと宣言してから、MockitoをテストのためにRegDaoに注入させます。

import static org.junit.Assert.assertEquals; 

import javax.inject.Inject; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.InjectMocks; 
import org.mockito.Mock; 
import org.mockito.Spy; 
import org.mockito.runners.MockitoJUnitRunner; 

@RunWith(MockitoJUnitRunner.class) 
public class MockitoSpyInjection { 
    static class Notification { } 
    static class EntryService { } 
    static class RegDao { 
     @Inject 
     Notification foo; 

     @Inject 
     EntryService bar; 

     public RegDao() { 
     } 

     public RegDao(Notification foo, EntryService bar) { 
      this.foo = foo; 
      this.bar = bar; 
     } 

     public Notification getFoo() { 
      return foo; 
     } 

     public EntryService getBar() { 
      return bar; 
     } 

    } 


    @Mock 
    Notification foo; 

    @Mock 
    EntryService bar; 

    @Spy 
    @InjectMocks 
    RegDao dao; 

    @Test 
    public void test() { 
     assertEquals(foo, dao.getFoo()); 
     assertEquals(bar, dao.getBar()); 
    } 
} 
:ここ

は、私はあなたが実行しようとしていると思うのテストの作業モックアップです

関連する問題