Я бы хотел проверить свой метод репозитория. Однако, когда я запускаю свой тест, он терпит неудачу из-за 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))));
}
...
}