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