2012-02-16 4 views
1

내가 firstName을 설정받을 가진 사람 클래스가 그대로 객체의 나머지 부분을 떠날 특정 메소드 (getLastName)를 모의하고 모든 것을 남겨 두십시오 (다른 내부 필드, 함수 ... 그대로)?Powermock - 어떻게 우리는 단지</p> <p>의 TestClass가 <p>TestCase1</p>을 실행하기 위해, 성을 할 수있는 구체적인 방법을 조롱하고

public class Person { 
    private String firstName; 
    private String lastName; 

     public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

import static org.powermock.api.easymock.PowerMock.*; 
import static org.easymock.EasyMock.expect; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest ({Person.class}) 
public class TestClass { 

    @Test 
    public void TestCase1() { 
     Person person = createNiceMock(Person.class); 
     person.setFirstName = "First name"; 

     expect(person.getLastName()).andReturn("Fixed value").anyTimes(); 

     replayAll(); 

     String ln = person.getLastName(); //will return "Fixed value"; 

     String fn = person.getFirstName(); 
     // Currently it returns null because of createNiceMock 
     // but I want it to return "First name" (value has been set to mock object) 
     // Is it possible? 

     verifyAll(); 
    } 
} 
+1

는, 스파이이를위한 최고의 솔루션입니다. 그러나 간첩은 특별한 이유 때문에 드물게 사용되어야합니다. 더 많은 정보를 위해서. 스파이/부분 조롱 함에 대해서는 http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#16을 참조하십시오. – Bala

답변

3

개별 방법 (개인 포함) 모의 스파이를 사용할 수 있습니다

딜런에 의해 언급 한 바와 같이
Person classUnderTest = PowerMockito.spy(new Person()); 

    // use PowerMockito to set up your expectation 
    PowerMockito.doReturn("Fixed value").when(classUnderTest, "getLastName");