私はASP.NET Core APIを持っています。私はすでにasp.netコアで統合テストを行う方法を示す文書hereを見てきました。この例では、テストサーバーを設定してからコントローラメソッドを呼び出します。
しかし、(コントローラメソッドではなく)特定のクラスメソッドを直接テストしたいですか?たとえば:ASP.NETコアの統合テストにおける依存関係の解決
public class MyService : IMyService
{
private readonly DbContext _dbContext;
public MyService(DbContext dbContext)
{
_dbContext = dbContext;
}
public void DoSomething()
{
//do something here
}
}
テストを開始するには、私はすべての依存関係が登録を取得しますので、startup.cs
が呼ばれるようにしたいとき。 (dbcontextのような)しかし、私はどのように解決するのですか?IMyService
?
注:私はDoSomething()
メソッドを直接テストする理由は、このメソッドはどのコントローラからも呼び出されないためです。バックグラウンド処理にこのAPIの内部にHangfire
を使用しています。 Hangfireのバックグラウンド処理ジョブは、DoSomething()
メソッドを呼び出します。統合テストでは、Hangfireの使用を避けたいだけで、DoSomething()
メソッドを直接呼び出すことができます。
iが(IMyService)_server.Host.Services.GetService(typeof演算(IMyService))= VARサービスを使用します。 – LP13
それと同じですが、拡張メソッドは、キャストやヌルチェックを行う必要がないので便利です( 'サービスを解決できない場合はGetRequiredServiceがスローされますので、その名前に** Required **が付きます) – Tseng
それは私が '_server.Host.Services'で見つけられなかった理由です。 – LP13