【发布时间】: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();
}
}
【问题讨论】:
-
正如 Dylan 所提到的,间谍是解决这个问题的最佳解决方案。但出于特定原因,应谨慎使用间谍。欲了解更多信息。关于间谍/部分模拟陷阱,请参阅docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#16。
标签: unit-testing testing mocking easymock powermock