2013-05-08 1 views
0

Ninject를 사용하는 데모 웹 API 응용 프로그램을 만들었습니다. 응용 프로그램을 실행하면 정의 된 경로로 이동하고 예상되는 데이터를 얻을 수 있으므로 제대로 작동합니다. 이제 ApiController를 테스트하기위한 단위 테스트를 추가하기 시작하겠습니다.Ninject를 사용할 때 새 컨트롤러를 올바르게 인스턴스화하려면 어떻게합니까?

어떻게 새 ApiController를 인스턴스화합니까? var sut = new DogsController();을 사용하고 있지만 "...에 0 개의 인수를 사용하는 생성자가 없습니다"라는 오류가 발생합니다. 올바른 건 0 인수를 취하는 생성자가 없지만 Ninject가 나를 처리해야한다는 것입니다. 맞습니까? 어떻게 해결할 수 있습니까?

답변

1

유닛 테스트 프로젝트가 아니라 Web API 애플리케이션에 Ninject를 유선으로 연결합니다. 결과적으로, Ninject는 명시 적으로 컨트롤러를 만들 때 컨트롤러 또는 컨트롤러에 대한 종속성을 생성하지 않습니다 (Web API 응용 프로그램에서 프레임 워크가 컨트롤러를 생성합니다).

Ninject를 유닛 테스트 프로젝트에 연결할 수는 있지만 올바른 작업은 아닙니다. 알려진 상태의 테스트에서 컨트롤러를 작성해야하므로 알려진 종속성을 전달하거나 모의 (mock) 종속성의 일부 양식을 전달해야합니다.

0

DI 컨테이너는 "new Something()"을 작성할 때마다 코드를 변형시키는 마술이 아닙니다. 유닛 테스트에서 컨트롤러를 손으로 새롭게 만들고 있습니다. (이것은 좋은 연습입니다.)하지만 이것은 생성자가 예상하는 추상화의 적절한 가짜 버전을 생성자에 제공해야 함을 의미합니다.

관련 문제