2017-12-18 5 views
0

참고 : 종속성 삽입을 사용하는 대신 객체를 구성하는 코드를 갖는 잘못된 디자인을 예상하는 사람들을 위해, 또는 쉽게 조롱당하는 공장; 필자는 레거시 코드에 대한 테스트 작성을 다루고 있는데, 코드를보다 현대적인 디자인으로 리팩토링하는 것은 옵션이 아닙니다.PowerMockito 사용 특정 인수 집합을 사용하여 생성자가 호출되었는지 확인하는 방법

명령 메서드를 실행하면 다른 클래스 MyObject에 종속적 인 MyObjectWrapper 클래스에 세 개의 개체가 생성됩니다. 테스트에서이 클래스들과 6 개의 객체 모두 모두 조롱을받습니다.

@RunWith(PowerMockRunner.class) 
@PrepareForTest(MyCommand.class) 
public class MyCommandTest { 

    @Mock public MyObject objectOne; 
    @Mock public MyObject objectTwo; 
    @Mock public MyObject objectThree; 

    @Mock public MyObjectWrapper wrapperOne; 
    @Mock public MyObjectWrapper wrapperTwo; 
    @Mock public MyObjectWrapper wrapperThree; 

    private MyCommand command; 

    @Before public void beforeEach() { 
     command = new MyCommand(); 
     MockitoAnnotations.initMocks(this); 
     initialiseWrapper(wrapperOne, objectOne, true, false); 
     initialiseWrapper(wrapperTwo, objectTwo, false, false); 
     initialiseWrapper(wrapperThree, objectThree, true, true); 
    } 

    private void initialiseWrapper(MyObjectWrapper wrapperMock, MyObject objMock, boolean option1, boolean option2) { 
     wrapperMock = PowerMockito.mock(MyObjectWrapper.class); 
     PowerMockito.whenNew(MyObjectWrapper.class) 
      .withParameters(MyObject.class, Boolean.class, Boolean.class) 
      .withArguments(objMock, option1, option2) 
      .thenReturn(wrapperMock); 
    } 

    @Test public void testConstructoresCalled() throws Exception { 
     command.execute(); 

     VERIFY constructor with arguments: objectOne, true, false 
     VERIFY constructor with arguments: objectTwo, false, false 
     VERIFY constructor with arguments: objectThree, true, true 
    } 
} 

내가 생성자가 3 회라는 것을 확인할 수 있다는 것을 알고 : 다음 코드를 고려 세에 통과와 나는, 생성자가 호출 된 것을 확인해야하지만

PowerMockito.verifyNew(MyObjectWrapper.class, times(3)); 

인수. 이것을 할 수 있습니까?

답변

0

PowerMockito.html#verifyNew, 무슨 3 생성자가 호출 될 때 발생하는, 내가 확인할 수있는 ConstructorArgumentsVerification javadoc

+0

가 하나의 객체를 반환합니다 참조하십시오 ConstructorArgumentsVerification을 반환하므로 반환 된 객체를 사용할 수 있습니까? –

+0

각 통화를 확인해야합니다 (정확하게 기억하는 경우) –

+0

감사합니다. PowerMockito.verifyNew (MyObjectWrapper.class) .withArguments (objectOne, true, false); 올바른 해결책입니다. –

관련 문제