Отже, я створюю об'єкт макету як статичну змінну на рівні класу так… В одному тесті я хочу Foo.someMethod()
повернути певне значення, а в іншому тесті - я хочу повернути інше значення. Проблема, яка у мене виникає, полягає в тому, що, здається, мені потрібно відновити макети, щоб змусити це правильно працювати. Я хотів би уникнути відновлення макетів і просто використовувати ті самі об’єкти в кожному тесті.
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
, тобто я повинен був би робити ланцюжок у кожному тесті.