2017-08-04 34 views
0

我在我的代碼中有2 constructor。一個是默認的構造函數(無參數),另一個是參數化的構造函數。爲什麼我們不能使用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 s,然後讓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()); 
    } 
} 
相關問題