【问题标题】:Powermock - how to mock a specific method and leave the rest of the object as-isPowermock - 如何模拟特定方法并使对象的其余部分保持原样
【发布时间】:2012-02-16 03:30:12
【问题描述】:

我有一个 Person 类,其中设置了 FirstName, LastName

执行TestCase1的TestClass

我们可以只模拟一个特定的方法 (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();
    }
}

【问题讨论】:

标签: unit-testing testing mocking easymock powermock


【解决方案1】:

您可以使用 spy 来模拟单个(包括私有)方法:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2021-11-24
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多