Итак, я создаю фиктивный объект как статическую переменную на уровне класса следующим образом ... В одном тесте я хочу 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
, то есть мне пришлось бы создавать цепочки в каждом тесте.