1

저는이 문제로 많은 시간을 보냈습니다. 내 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 
    } 

답변

0

그래서 두 잠못드는 밤 이후 나는 테스트 서버가 너무

.AddDbContext<BoatInspectorContext>(
       opt=>opt.UseNpgsql(Configuration.GetConnectionString("BoatInspectorConnectionString"))); 

를 사용하여 apsettings.json에서 내 DB에 연결 문자열을 읽을 수 없습니다 어떤 unovious 이유로 고장 ... 발견 어떤 이유로

.AddDbContext<BoatInspectorContext>(
       opt => opt.UseNpgsql(
        connectionString: 
        "my_magic_connection_string")); 

을했다하는 모든 내가 한이 오류는 어디오고되지 않았거나 나는 그것이 매우 명백했다 무엇 spoted 후, 그래서 어쩌면 내가 그것을 보지 못했다.