แม้ว่าฉันจะเห็นด้วยกับคำตอบของ iwein โดยสิ้นเชิงก็ตาม (
ชอบองค์ประกอบมากกว่ามรดก
) ฉันยอมรับว่ามีบางครั้งการถ่ายทอดทางพันธุกรรมดูเหมือนเป็นเรื่องธรรมชาติและฉันไม่รู้สึกว่าทำลายหรือปรับโครงสร้างใหม่เพียงเพื่อประโยชน์ในการทดสอบหน่วย
ดังนั้นคำแนะนำของฉัน:
abstract class BaseService {
protected void commonSave() {
}
abstract void save();
}
public ChildService extends BaseService {
public void save() {
this.commonSave();
}
}
จากนั้นในการทดสอบหน่วย:
ChildService childSrv = Mockito.mock(ChildService.class, Mockito.CALLS_REAL_METHODS);
Mockito.doAnswer(new Answer<Void>() {
@Override
public Boolean answer(InvocationOnMock invocation)
throws Throwable {
return null;
}
}).when(childSrv).commonSave();
childSrv.save();
Mockito.verify(childSrv, Mockito.times(1)).commonSave();