Есть ли простая причина, по которой Mock и SpyBean нельзя использовать вместе? - PullRequest
0 голосов
/ 21 января 2020

Изначально я аннотировал репозиторий с помощью @SpyBean, чтобы отслеживать количество вызовов его методов. Затем я понял, что мне нужно аннотировать его с помощью @Mock, чтобы высмеивать то, что было возвращено из репозитория.

Итак, я получил:

...
@SpyBean
@Mock
SomeService someservice;
...

, что вызвало все мои тесты с использованием этого Сбой службы с

java.lang.IllegalStateException: Failed to load ApplicationContext

Поэтому я удалил @SpyBean, а затем все снова заработало, кроме причины, по которой я хотел использовать @SpyBean, чтобы я мог высмеивать некоторые методы, а не другие. Разве это не работает с @Mock?

Редактировать: кто-то спросил файл

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {RestApplication.class }, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles({ "test" })
public class SomeServiceTest {

    @Autowired
    SomeService someService;

    //@SpyBean
    @Mock
    SomeRepository someRepository;

    String FILENAME = "txt";

    @Before
    public void setUp() {
        someService = new SomeService(someRepository);
    }

    @Test
    public void testFileName() {        

        when(someRepository.findSomethingByAttribute(anyString()))
                .thenReturn(new SomePOJO("", FILENAME, ""));

        someService.runFileName(FILENAME);

        verify(someRepository, times(1)).save(any(SomePOJO.class));
    }
...