2016-07-12 3 views
0

나는 따라하기를 시도하고있다. (확실한 방법이 있지만 확실치 않다.)Mockito에 어떤 방법이 있어도 특정 객체 유형의 속성이 호출 될 때 값을 반환하는 규칙을 설정 했습니까?

문제 :

내 클래스의 private 메소드가있다가, 클래스가 @InjectedMocks를 사용하여 주입 하였다.

개인 메서드는 서비스를 호출하고 매개 변수로 특성 개체의 속성을 보냅니다. 이

private MyObject myObject = new Object(); 

public void main(){ 
    doSomething(); 
} 

private void doSomething(){ 
    someService(mObject.getValue); 
} 

문제와 같은

뭔가 내 객체가 쉽지 않다이며 그것을 값을 제공하는 주석이 있습니다. @InjectedMocks처럼 값이 할당되지 않고 myObject가 항상 null입니다.

메서드와 개체가 모두 비공개이므로 값을 할당 할 수 없습니다. (그리고 공용 설정자를 추가하지 않아도됩니다.)

내 방식 :

when(any(MyObject).class).getValue().thenReturn("something"); 

그래서, 내 테스트에서 순이익을 피할 : 나는 이런 식으로 뭔가를 조롱 할

.

mockito를 사용하는 것이 가능합니까?

더 좋은 방법이 있나요 ??

답변

0

PowerMock.createPartialMock과 메소드 호출 프록시를 사용하여 객체 또는 메소드 만 조롱 할 수 있습니다. 예를 들어 당신의 위의 코드를 들어

when(any(MyObject).class).getValue().thenReturn("something"); 

난 당신이 당신의 코드 예제에 약간의 오차가 있다고 가정

when(mockedObject).methodCall().thenReturn("something"); 
+0

개인용으로 호출 할 수없는 경우에도? – jpganz18

+0

나쁘지 않은 개인적인 방법은 조롱을받을 수 없다. – amitmah

1

해야한다.

다음은 실제로 "foobar"를 인쇄하고 출력합니다. 실제 코드와 비교하여 잊어 버린 것을 확인하십시오.

public class MockitoTest { 
    @InjectMocks private TestClass test; 
    @Mock private MyObject mock; 

    @Test 
    public void test() { 
     MockitoAnnotations.initMocks(this); 
     Mockito.when(mock.getValue()).thenReturn("foobar"); 
     test.main(); 
    } 
} 

class TestClass { 
    private MyObject myObject = new MyObject(); 

    public void main() { 
     doSomething(); 
    } 
    private void doSomething() { 
     System.out.println(myObject.getValue()); 
    } 
} 

class MyObject { 
    public String getValue() { 
     return "hello"; 
    } 
} 
관련 문제