ฉันมีวิธีส่วนตัวในชั้นทดสอบของฉันที่สร้างBar
วัตถุที่ใช้กันทั่วไป คอนBar
สตรัคsomeMethod()
วิธีการโทรในวัตถุที่เยาะเย้ยของฉัน:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
ในบางวิธีการทดสอบของฉันฉันต้องการตรวจสอบsomeMethod
ก็ถูกเรียกใช้โดยการทดสอบนั้น สิ่งต่อไปนี้:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
สิ่งนี้ล้มเหลวเนื่องจากวัตถุที่เยาะเย้ยได้someMethod
เรียกใช้สองครั้ง ฉันไม่ต้องการวิธีการทดสอบของฉันจะดูแลเกี่ยวกับผลข้างเคียงของฉันgetBar()
วิธีจึงจะเหมาะสมที่จะตั้งค่าวัตถุจำลองของฉันในตอนท้ายของgetBar()
?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
ฉันถามเพราะเอกสารแนะนำการรีเซ็ตวัตถุจำลองโดยทั่วไปบ่งบอกถึงการทดสอบที่ไม่ดี อย่างไรก็ตามสิ่งนี้รู้สึกดีสำหรับฉัน
ทางเลือก
ตัวเลือกทางเลือกน่าจะเรียก:
verify(mockedObject, times(2)).someMethod();
ซึ่งในความคิดของฉันบังคับให้การทดสอบแต่ละครั้งจะรู้เกี่ยวกับความคาดหวังของgetBar()
เพื่อประโยชน์