2017-06-01 7 views
1

Web UIのいくつかのマスターテーブル(ドロップダウン用)からデータを取得する次のAPIコントローラがあります。ユニットテスト、100%カバレッジを得るためにヌルデータの復帰をシミュレートする方法

[TestMethod] 
public void GetAllPersonas_ShouldReturnAllPersonas() 
{ 
    var controller = new ListasController(); 

    controller.Request = new HttpRequestMessage 
    { 
     RequestUri = new Uri("http://localhost/api/Listas/GetPersonas") 
    }; 

    controller.Configuration = new HttpConfiguration(); 
    controller.Configuration.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional }); 

    controller.RequestContext.RouteData = new HttpRouteData(
     route: new HttpRoute(), 
     values: new HttpRouteValueDictionary { { "controller", "Listas" } }); 

    var response = controller.GetPersonas() as List<Personas>; 
    Assert.IsNotNull(response); 
    Assert.AreEqual(response[0].IdPersona, 1); 
    Assert.IsInstanceOfType(response, typeof(List<Personas>)); 

} 

コードが正常に動作しますが、IFの内部、それは決してこの文ため、データが来ているので、コードカバレッジは、約50%である。

public List<Personas> GetPersonas() 
{ 
    try 
    { 
     ListService = new ListService(); 
     var listPersonas = ListService.GetPersonas(); 

     if (listPersonas == null) 
     { 
      throw new HttpResponseException(HttpStatusCode.NotFound); 
     } 

     return listPersonas.ToList(); 
    } 
    catch (Exception ex) 
    { 
     throw new HttpResponseException(
     Request.CreateErrorResponse(HttpStatusCode.NotFound, ex.Message)); 
    } 
} 

は、次にユニットテストでは、私はこれを持っていますそのテーブルは決して空ではありません。

この場合、どのようにして100%コードカバレッジを保証できますか? IFを削除すべきですか?またはここで何かをエミュレートできますか?

おかげ

+1

コントローラは、コントローラがその依存関係を作成することを制御しているため、ユニットテスト中にコントローラを置き換えるのを困難にする 'ListService'に密接に結合されています。コントローラに明示的な依存関係として注入することによって、そのコントロールを反転させます。これにより、単体テスト中にテストシナリオを満たすためにスタンドを模擬したり置き換えたりすることができます。 – Nkosi

+1

'ListService.GetPersonas'が' null'を返すことがないなら、それをチェックすることに意味はありません。 – Lee

答えて

4

1つのオプションはかなりアップし、それを新しいGetPersonasコールの内部よりも、IListServiceに注入するだろう。 次に、あなたのユニットテストで、リストやnullを返すことを目的とするスタブ/モックを望みどおりにすることができます。

https://autofac.org/http://nsubstitute.github.io/にスクイズがあります。

1

統合テストを作成しますか?または単体テストを作成したいですか?

ユニットテストを作成する場合は、ListService依存関係を抽象化する必要があります。一旦抽象化されると、依存関係を模倣したり、偽装することができます。偽装されたり偽装されたりすると、ListService依存関係のさまざまな戻り発生、つまり標準返品、null返品、および/または例外の可能性を処理するテストを作成できます。

関連する問題