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);     
} 

私はこれをデバッグする場合、デバッガは」doesnのコントローラのコンストラクタに入ることさえありません。私がコンストラクタをコメントアウトして空のものを作成すると、すべてが正常に動作するので、依存関係注入とは100%何かが行われます。助けてください。ありがとうございました。 1


UPDATEは、だから、私は、コンストラクタ次の操作を行う場合はいずれかの初期化されていないので、それは、コンテキストの初期化に問題があるようです。

public SurveyController(BoatInspectorContext context) 
    { 
    //debuger doesn't go inside here so must be something with context 
    } 

答えて

0

だから2つの眠れぬ夜の後、私は障害が...何らかのunovious理由でテストサーバーがそう

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

を使用してapsettings.jsonから私のDBへの接続文字列を読み取ることができませんでした何らかの理由で

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

をしたためにするために、すべて私がしていたが、このエラーはどこにも来ていなかったか、私はそれはそれはかなり明白だった言っspoted後ので、多分私はそれを見ていません。

関連する問題