警告を使用した三つの依存関係を持つMVCコントローラにどのように:私は、一般的に、部品番号、部品番号とユニットテスト、およびTDDに新しい尻のブランドです。ユニットテスト部品番号
私は3つの依存関係を持つコントローラを持っています。ここでは、今
public class SomethingController : Controller
{
private readonly ILogger<SomethingController> _logger;
private readonly ISomethingRepository _something;
private readonly IExceptionSvc _ex;
public SomethingController(ILogger<SomethingController> logger,
ISomethingRepository something,
IExceptionSvc ex)
{
_logger = logger;
_something = something;
_ex = ex;
}
[HttpGet]
[AllowAnonymous]
public JsonResult GetStuff()
{
//intitialize list
var stuffs = new List<StuffViewModel>();
try
{
_logger.LogInformation("SomethingController: GetStuff() - Getting Stuff, sorted ascending.");
//get the stuffs
stuffs = _something.GetStuff();
_logger.LogInformation("Retrieved {0} Stuffs.", stuffs.Count);
}
catch (Exception ex)
{
_logger.LogError("Error in SomethingController: GetStuff()", ex);
return _ex.Http500ErrorReturn("GetStuff");
}
return Json(stuffs);
}
}
各依存関係が何のためにあるのかの説明である:ここでSomethingControllerにコンストラクタ(など)がある
ILoggerです:これはMicrosoft.Extensionsを使用して、ログに単純です。 NLogを介したロギング。 ISomethingRepository:これはすべての仕事をします(まあ...それの執行、本当に)。それはデータベースを呼び出し、物事を取得します。 GetStuff()というメソッドがあり、単純にStuffのリストを返します。このリポジトリはデータベースに依存しており、コンポーザを介してリポジトリに注入されます。
IExceptionSvc:これは、呼び出し元にJSON形式の復帰のための500のエラー応答を返すメソッドを持っているだけでダム少しサービスです。
私はリポジトリにGetStuff()の実装を呼び出しますコントローラでGetStuff()アクションを、テストしたいです。
私は現在、次のコードは、私のテストプロジェクトでは、内スタブがあります。
public void GetStuff_Is_Awesome()
{
Mock<ILogger<SomethingController>> logger = new Mock<ILogger<SomethingController>>();
Mock<ISomethingRepository> something = new Mock<ISomethingRepository>();
Mock <IExceptionSvc> ex = new Mock<IExceptionSvc>();
SomethingController sc = new SomethingController(logger.Object, something.Object, ex.Object);
sc.GetStuff();
//...what now? What am I looking for? Am I going to see a list of stuffs here?
}
私はちょうど期待するかを知りたいですか?スタッフのリストが返されたかどうかをテストしていますか?それをどうやってテストするのですか?ここで
は、(基準ためにレポのコンストラクタで)リポジトリに)GetStuff(の実装です:
private readonly ApplicationDbContext _context;
private readonly ILogger<SomethingRepository> _logger;
public SomethingRepository(ApplicationDbContext context,
ILogger<SomethingRepository> logger)
{
_context = context;
_logger = logger;
}
public List<StuffViewModel> GetStuff()
{
List<StuffViewModel> stuffs = null;
stuffs = _context.Stuffs.OrderBy(b => b.Name).Select(b => new StuffViewModel
{
Id = b.Id,
Name = b.Name
}).ToList();
return stuffs;
}
私に例を挙げてもらえますか? – crackedcornjimmy
私は今すぐGetStuff()実装を追加しました。 – crackedcornjimmy
'GetStuff'がアクションであると仮定すると、戻り値は' ActionResult'になります。次に、その戻り値を検査して、テストするさまざまなことをアサーションする必要があります。 –