Сбой @DataMongoTest из-за исключения UnsatisfiedDependencyException - PullRequest
0 голосов
/ 21 марта 2019

Я бы хотел проверить свой метод репозитория. Однако, когда я запускаю свой тест, он терпит неудачу из-за UnsatisfiedDependencyException. По какой-то причине он пытается создать AuthorizationServerConfig (или другой компонент, если я удалю аннотацию @Configuration из этого). Это приводит к сбою, потому что в цепи зависимостей требуется пул соединений RabbitMQ, который я предпочитаю не указывать в тесте репозитория.

Вопрос в том, почему Spring пытается создать все эти компоненты, не связанные с логикой хранилища?

Я попытался исключить все эти бины с @DataMongoTest(exludeFilters: ...) и @DataMongoTest(exludeAutoConfiguration: ...), но это не имело никакого эффекта.

Единственное, что помогло, - это добавить @Profile ("! Test") ко всем bean-компонентам (всем! Контроллерам, службам, компонентам) в приложении, но это пахнет очень уродливым решением.

Класс репозитория очень прост:

    @Repository
    public interface ParticipantRepository extends MongoRepository<Participant, String> {
        List<Participant> findAllByLoggedInTrueAndAccessTokenExpirationAfter(Date expirationAfter);
    }

Мой тестовый класс:

    @DataMongoTest()
    @RunWith(SpringRunner.class)
    public class ParticipantRepositoryTest {

        @Autowired
        private MongoTemplate mongoTemplate;
        @Autowired
        private ParticipantRepository repository;

        private List<Participant> participants;

        @Before
        public void setUp() throws Exception {
            participants = createParticipants();
            repository.saveAll(participants);
        }

        @After
        public void tearDown() throws Exception {
            repository.deleteAll();
        }

        @Test
        public void findAllByLoggedInTrueAndExpirationAfter_shouldNotReturnLoggedOutParticipants() {
            List<Participant> result = repository.findAllByLoggedInTrueAndAccessTokenExpirationAfter(new Date());

            getLoggedOutParticipants().forEach(participant -> assertThat(participant, not(isIn(result))));
        }
    ...
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...