Powermock - как смоделировать конкретный метод и оставить оставшуюся часть объекта как есть - PullRequest
1 голос
/ 16 февраля 2012

У меня есть класс Person с get, установленным для FirstName, LastName

TestClass для выполнения TestCase1

Можем ли мы просто насмехаться над определенным методом (getLastName) и оставить все остальное (другоевнутренние поля, функции ... как есть)?

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 Ответ

3 голосов
/ 16 февраля 2012

Вы можете использовать шпиона, чтобы высмеивать отдельные (в том числе личные) методы:

Person classUnderTest = PowerMockito.spy(new Person());

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