假如其他答案指出這樣的測試用例很脆弱,並且測試用例不應該基於實現,並且應該依賴於行爲,如果您仍然想要嘲笑它們,那麼這裏有一些方法:
PrivateMethodDemo tested = createPartialMock(PrivateMethodDemo.class,
"sayIt", String.class);
String expected = "Hello altered World";
expectPrivate(tested, "sayIt", "name").andReturn(expected);
replay(tested);
String actual = tested.say("name");
verify(tested);
assertEquals("Expected and actual did not match", expected, actual);
這是你如何使用PowerMock來做到這一點。
PowerMock的expectPrivate()做到這一點。
Test cases from PowerMock其測試私有方法嘲諷
UPDATE: Partial Mocking with PowerMock有一些免責條款,並抓住
class CustomerService {
public void add(Customer customer) {
if (someCondition) {
subscribeToNewsletter(customer);
}
}
void subscribeToNewsletter(Customer customer) {
// ...subscribing stuff
}
}
然後創建的CustomerService的部分模擬,讓你想方法列表嘲笑。
CustomerService customerService = PowerMock.createPartialMock(CustomerService.class, "subscribeToNewsletter");
customerService.subscribeToNewsletter(anyObject(Customer.class));
replayAll();
customerService.add(createMock(Customer.class));
向客服模擬中那麼add()
是要測試和subscribeToNewsletter()
你現在可以寫一個期望像往常一樣的方法,真實的東西。
你嘲笑私有方法,_returns_結果,而不是修改** **內部領域。 – Cherry
櫻桃檢查更新的答案。 –