У меня есть класс обслуживания, для которого я хочу написать тесты junit.Вот этот класс обслуживания:
public class FooService {
private BarService barService;
public FooService(BarService barService) {
this.barService = barService;
}
public Foo methodOne(int a) {
double value = methodTwo();
//do some other stuff and return Foo
}
public double methodTwo() {
//do stuff
}
}
Вот мой тест junit:
public class FooServiceTest {
@Mock
BarService barService;
FooService fooService;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
fooService = Mockito.spy(new FooService(barService));
doReturn(1.0).when(fooService).methodTwo();
doCallRealMethod().when(fooService).methodOne(1);
}
@Test
public void test() {
fooService.methodOne(1);
assertThat(.....)
}
}
Моя проблема в том, что когда я запускаю свой тест, он на самом деле никогда не вызывает methodOne
.Он просто пропускает все в FooService
и переходит непосредственно к строке asserThat(...)
.У меня есть ощущение, что это как-то связано с шпионажем на объекте fooService.
Как я могу написать тест junit для этого FooService, где я делаю реальный вызов methodOne
, но я высмеиваю возвращение methodTwo
?