我想测试我的存储库方法。但是,当我运行测试时,由于UnsatisfiedDependencyException
而导致测试失败。由于某种原因,它试图创建AuthorizationServerConfig
(如果我从此bean中删除@Configuration注释,则尝试创建其他bean)。失败会导致更深的依赖关系链,它需要RabbitMQ连接池,而我不希望在存储库测试中提供它。
问题是为什么Spring尝试创建所有未链接到存储库逻辑的bean?
我尝试排除所有带有@DataMongoTest(exludeFilters: ...)
和@DataMongoTest(exludeAutoConfiguration: ...)
的bean,但没有效果。
唯一有用的是将@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))));
}
...
}