Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save dehidehidehi/bc2de58f801f1482a68589dfaf212571 to your computer and use it in GitHub Desktop.
Save dehidehidehi/bc2de58f801f1482a68589dfaf212571 to your computer and use it in GitHub Desktop.
Assert that the correct @qualified spring bean is being injected into a `constructor`.
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import java.lang.reflect.Constructor;
import java.lang.reflect.Parameter;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
class MongoServiceTest {
@Test
void shouldUseCorrectQualifiedByNameMongoTemplateBean() throws NoSuchMethodException {
final String qualifiedBeanName = "TO_REPLACE";
final Constructor<MongoService> constructor = MongoService.class.getConstructor(MongoTemplate.class, ObjectMapper.class);
assertThat(constructor)
.satisfies(constr -> assertThat(constr).isNotNull())
.satisfies(constr -> assertThat(constr.getAnnotation(Autowired.class)).isNotNull())
.extracting(Constructor::getParameters)
.extracting(this::findMongoTemplateParamOrElseFail)
.satisfies(mongoTemplateParam -> assertThat(mongoTemplateParam.getAnnotation(Qualifier.class)).isNotNull())
.extracting(mongoTemplateParam -> mongoTemplateParam.getAnnotation(Qualifier.class))
.satisfies(qualifierAnnotation -> assertThat(qualifierAnnotation.value()).isEqualTo(qualifiedBeanName));
}
private Parameter findMongoTemplateParamOrElseFail(final Parameter[] params) {
return Arrays.stream(params).filter(p -> p.getType().equals(MongoTemplate.class)).findFirst().orElseGet(Assertions::fail);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment