복붙노트

[SPRING] 의존성에 대한 [org.springframework.social.twitter.api.Twitter] 유형의 적격 빈이 없음

SPRING

의존성에 대한 [org.springframework.social.twitter.api.Twitter] 유형의 적격 빈이 없음

스프링 부트 애플리케이션에서 트위터 oAuth 지원을 구현하려고합니다. 이 예제 다음 http://spring.io/guides/gs/accessing-twitter/ 내 응용 프로그램에 트위터 액세스를 성공적으로 추가 했으므로 이제 다음과 같은 작업을 수행했습니다.

HomeController :

@Controller
@RequestMapping("/")
public class HelloController {

    private Twitter twitter;

    private ConnectionRepository connectionRepository;      

    @Inject
    public HelloController(Twitter twitter, ConnectionRepository connectionRepository) {
        this.twitter = twitter;
        this.connectionRepository = connectionRepository;
    }

    @RequestMapping(method=RequestMethod.GET)
    public String helloTwitter(Model model) {
        if (connectionRepository.findPrimaryConnection(Twitter.class) == null) {
            return "redirect:/connect/twitter";
        }

        TwitterProfile userProfile = twitter.userOperations().getUserProfile();

        model.addAttribute(userProfile);
        CursoredList<TwitterProfile> friends = twitter.friendOperations().getFriends();
        model.addAttribute("friends", friends);
        return "hello";
    }

}

신청 종류 :

@PropertySources({ @PropertySource(value = "classpath:application.properties") })
@ComponentScan("com.example")
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

지금까지 모든 것이 잘 작동합니다. 나는 문제없이 응용 프로그램을 시작할 수 있습니다.

또한 통합 테스트가 많이 있습니다. 예를 들면 다음과 같습니다.

@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringApplicationConfiguration(classes = Application.class)
@IntegrationTest("server.port: 0")
public class SearchControllerTest {

    @Value("${local.server.port}")
    protected int port;

    @Test
    public void testSearchResultsWithDefaultPageAndSize() {
        // @formatter:off
        given()
            .when()
                .get(format("http://localhost:%d/api/v1.0/search/%s", port, "RDBMa mosyl"))
            .then()
                .statusCode(200)
                .contentType(ContentType.JSON)
                .body("totalCount", equalTo(4))
                .body("entries.size", equalTo(4));
        // @formatter:on
    }
....
}

이제 트위터 소셜 기능을 추가 한 후에 예외를 제외하고 모든 테스트가 실패했습니다.

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.social.twitter.api.Twitter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
    ... 43 common frames omitted

왜 이것이 응용 프로그램에서 작동하고 테스트에서 실패합니까? 테스트 구성의 문제점은 무엇입니까?

해결법

  1. ==============================

    1.그 이유는 src / main / resources / application.properties 또는 config / application.properties가 없기 때문에 spring.social.twitter.appId 및 spring.social.twitter.appSecret을 정의하기 때문입니다.

    그 이유는 src / main / resources / application.properties 또는 config / application.properties가 없기 때문에 spring.social.twitter.appId 및 spring.social.twitter.appSecret을 정의하기 때문입니다.

  2. from https://stackoverflow.com/questions/29512365/no-qualifying-bean-of-type-org-springframework-social-twitter-api-twitter-foun by cc-by-sa and MIT license