2015-03-03 3 views
0

код выглядит примерно такКак издеваются объект, который находится внутри метода класса serviceimpl

public GetPortfoliosResponse retrievePortfolios(RequestIdentityInfo requestIdentityInfo, GetPortfoliosRequest getPortfoliosRequest) { 
    PortfolioReferenceParameter portfolioReferenceParameter = new PortfolioReferenceParameter(); 
    //some code 
    List<Portfolio> portfolios = portfolioReferenceParameter.getPortfolios(); 
} 

и в моем тестовом классе я делаю что-то вроде этого

@Mock 
private PortfolioReferenceParameter portfolioReferenceParameter; 
@Before 
public void setup() { 
    MockitoAnnotations.initMocks(this); 
    List<Portfolio> portfolios = new ArrayList<Portfolio>(); 
    //code to build the list 
    when(portfolioReferenceParameter.getPortfolios()).thenReturn(portfolios); 
} 

Но это Безразлично» похоже, работает.

Когда я вызываю метод serviceimpl, он по-прежнему принимает фактический объект PortfolioReferenceParameter, который локально создается в этом методе. Как я могу издеваться над этим объектом с моим объектом?

+0

Я думаю, что в производственной программе портфели заполнены, верно? В этом случае ваш тест делает то, что никогда не произойдет в продуктивном сценарии. Вам лучше высмеивать истинные источники списка портфолио. – CoronA

ответ

0

Mocking constructors не поддерживается в Mockito - вам необходимо использовать PowerMock whenNew для этого - см. https://code.google.com/p/powermock/wiki/MockitoUsage13.

Лучше всего было бы реорганизовать метод retrievePortfolios взять экземпляр PortfolioReferenceParameter в качестве аргумента и впрыснуть издеваются в тесте

public class AppTest { 

    @Mock 
    private PortfolioReferenceParameter referenceParam; 

    private List portfolios = new ArrayList(); 

    @Before 
    public void setUp() { 
     when(referenceParam.getPortfolios()) 
      .thenReturn(portfolios); 
    } 

    @Test 
    public void testApp() { 
     GetPortfoliosResponse response = retrievePortfolios(requestIdentityInfo, getPortfoliosRequest, referenceParam); 
     // assert response details 
    } 
} 
+0

Я не могу изменить код serviceImpl. Думаю, мне нужно поговорить с PowerMock, как вы говорите. Спасибо за это – Raj