ดังนั้นฉันกำลังสร้างวัตถุจำลองเป็นตัวแปรแบบคงที่ในระดับชั้นเช่นนี้ ... ในการทดสอบหนึ่งฉันต้องการFoo.someMethod()
คืนค่าบางค่าในขณะที่การทดสอบอื่นฉันต้องการให้คืนค่าที่แตกต่างกัน ปัญหาที่ฉันมีคือดูเหมือนว่าฉันต้องสร้าง mocks ขึ้นใหม่เพื่อให้ทำงานได้อย่างถูกต้อง ฉันต้องการหลีกเลี่ยงการสร้าง mocks ขึ้นใหม่และใช้วัตถุเดียวกันในการทดสอบแต่ละครั้ง
class TestClass {
private static Foo mockFoo;
@BeforeClass
public static void setUp() {
mockFoo = mock(Foo.class);
}
@Test
public void test1() {
when(mockFoo.someMethod()).thenReturn(0);
TestObject testObj = new TestObject(mockFoo);
testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value
}
@Test
public void test2() {
when(mockFoo.someMethod()).thenReturn(1);
TestObject testObj = new TestObject(mockFoo);
testObj.bar(); // calls mockFoo.someMethod(), STILL receiving 0 as the value, instead of expected 1.
}
}
ในการทดสอบครั้งที่สองฉันยังคงได้รับ 0 เป็นค่าเมื่อเรียกว่า testObj.bar () ... วิธีที่ดีที่สุดในการแก้ไขปัญหานี้คืออะไร โปรดทราบว่าฉันรู้ว่าฉันสามารถใช้การจำลองที่แตกต่างกันFoo
ในการทดสอบแต่ละครั้งอย่างไรก็ตามฉันต้องmockFoo
เชื่อมโยงคำขอจำนวนมากออกไปซึ่งหมายความว่าฉันต้องทำการผูกมัดในการทดสอบแต่ละครั้ง