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を削除すべきですか?またはここで何かをエミュレートできますか?
おかげ
コントローラは、コントローラがその依存関係を作成することを制御しているため、ユニットテスト中にコントローラを置き換えるのを困難にする 'ListService'に密接に結合されています。コントローラに明示的な依存関係として注入することによって、そのコントロールを反転させます。これにより、単体テスト中にテストシナリオを満たすためにスタンドを模擬したり置き換えたりすることができます。 – Nkosi
'ListService.GetPersonas'が' null'を返すことがないなら、それをチェックすることに意味はありません。 – Lee