저는이 문제로 많은 시간을 보냈습니다. 내 WebAPI 응용 프로그램은 로컬 컴퓨터 및 프로덕션 서버에서 제대로 작동하지만 종속성 주입이있는 컨트롤러의 통합 테스트에서는 실패합니다. 모든 것이 매우 깨끗해 보입니다. 왜 이것이 작동하지 않는지 전혀 알지 못합니다.Dependancy Injection이 ASPNETCore.TestHost와 작동하지 않습니다.
그래서 여기에 모듈을 제공 : 컨트롤러를 :
public SurveyController(IBoatInspectorRepository<Survey> repository)
{
_repository = repository;
}
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] {"value1", "value2"};
}
위쪽 시작 :
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IBoatInspectorRepository<Survey>, BoatInspectorRepository<Survey>>();
}
테스트 :
[Test]
public async Task GetSurveyDb_NullReturn_ReturnNotFound()
{
using (var testServer = CreateTestServer())
{
var client = testServer.CreateClient();
var value = await client.GetAsync("/api/survey/");
}
}
private TestServer CreateTestServer()
{
var builder = new WebHostBuilder()
.UseStartup<Startup>()
.ConfigureServices(services =>
services.AddScoped<IBoatInspectorRepository<Survey>, BoatInspectorRepository<Survey>>());
return new TestServer(builder);
}
나는이 디버거는 '아무튼 디버깅하는 경우 심지어 컨트롤러 생성자로 이동합니다. 내가 생성자를 주석 처리하고 비어있는 것을 만들면 모든 것이 잘 작동하므로 의존성 주입과 관련이 100 %입니다. 도와주세요. 고맙습니다. 1
UPDATE는 그래서 내가 생성자 다음을 수행하는 경우 중 하나를 초기화하지 않기 때문에이 컨텍스트 초기화에 문제가 보인다.
public SurveyController(BoatInspectorContext context)
{
//debuger doesn't go inside here so must be something with context
}