2017-03-20 5 views
0

依存性注入が必要なときに、asp.netコアのコントローラとクラスをテストする方法についての十分な情報は見つけられません。Nunitを使ったAsp.netコアユニットテスト

public class EventServices : Service<EventBase>, IEventServices 
{ 
    private readonly IMemoryCache memCache; 
    private readonly UserManager<ApplicationUser> userManager; 
    private readonly IHttpContextAccessor accessor; 

    public EventServices(
     IRepository<Evento> repository, 
     IMemoryCache memCache, 
     UserManager<ApplicationUser> userManager, 
     IHttpContextAccessor accessor 
    ) : base(repository) 
    { 
     this.memCache = memCache; 
     this.userManager = userManager; 
     this.accessor = accessor; 

    } 

    public IQueryable<Evento> MyMethod(string message) 
    { 
    .... 

これクラッセは、スタートアップクラスに登録されています:

services.AddScoped<IEventServices, EventServices>(); 

コンストラクタ内の他のクラスのよう。このようなクラスをテストするためにどのようにNUnitのを使用して

+1

抽象的なすべての依存関係を抽象化して、単体テストで容易に擬似注入することができます。テスト中のメソッドと目的の動作の[mcve]を表示します。 – Nkosi

答えて

1

ASP.NETコアアプリケーションで実行時にサービスがどのように設定されているかは、テストする方法とは関係ありません。それをテストするには、ちょうどnewそれをアップし、依存関係を渡す必要があります。インフラストラクチャ(Webサーバ、データベースなど)と緊密に結合されている場合は、Moqのようなツールを使用してそれらをモックします。単体テストはすべての依存関係ではなく、コードをテストするだけでよいことに注意してください。

サービスとDI構成でASP.NET Coreがどのように機能するかをテストしたい場合、これは別の種類のテストです。そのために、統合テストまたは機能テストを使用しています。 ASP.NETコアと、ここTestServerタイプを使用してちょうどこれを行う方法の良いドキュメントがあります: https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/testing と基本的に https://docs.microsoft.com/en-us/aspnet/core/testing/integration-testing

、あなたがメモリにアプリケーションをホストするためにTestServerを使用することができますし、あなたが設定どのように微調整することができますあなたのアプリはStartupを使ってテストするのが簡単です(例えば、実際のデータベースの代わりにInMemoryデータベースを使用する)。その後、要求を出してテストから直接応答を得ることができますが、すべてがメモリに格納され、非常に高速です。彼らは単体テストではありませんが、それらはほぼ同じ速さで、あなたが探しているものを行うかもしれません。

これらの例はすべてxUnitを使用しています。これはNUnitと非常によく似ています。 xUnitに切り替えるだけで簡単に見つけることができます。なぜなら、これはASP.NET Core用のサンプルのすべてですからですが、NUnitにコミットしていれば、構文の変更は最小限に抑えられます。

関連する問題