3

MVC アプリを設計するとき、私は通常、ほとんどすべてのロジックを (可能な限り) アプリから除外しようとします。これを、リポジトリとドメイン エンティティとのインターフェイスとなるサービス レイヤーに抽象化しようとしています。

したがって、私のコントローラーメソッドは次のようになります。

public ActionResult Index(int id)
{
    return View(Mapper.Map<User, UserModel>(_userService.GetUser(id)));
}

サービスのテスト範囲が広く、アクション メソッドが上記の例のように単純であると仮定すると、これらのコントローラー メソッドを単体テストするのはやり過ぎでしょうか?

このようなメソッドの単体テストを作成した場合、テストからどのような価値が得られますか?

4

1 に答える 1

7

このようなメソッドの単体テストを作成した場合、テストからどのような価値が得られますか?

以下をアサートする単体テストを使用できます。

  1. _userService の GetUser メソッドが呼び出され、コントローラーに渡されたのと同じ int が渡されたこと。
  2. 返された結果が、PartialViewResult などではなく、ViewResult であったこと。
  3. 結果のモデルは UserModel インスタンスであり、User インスタンス (サービスから返されるもの) ではありません。

単体テストは、アプリケーションの正確性を確認するのと同じくらいリファクタリングに役立ちます。コードを変更した後でも結果が変わらないようにするのに役立ちます。

たとえば、リクエストが async/ajax の場合にアクションが PartialView または JsonResult を返すように変更したとします。コントローラーで変更するコードはそれほど多くありませんが、コードを変更するとすぐに単体テストが失敗する可能性があります。これは、要求が ajax であるかどうかを示すためにコントローラーのコンテキストをモックしていない可能性が高いためです。したがって、これは、正当性のアサーションを維持するために、単体テストを拡張するように指示します。

3 つの非常に単純なメソッドの IMO は間違いなく付加価値があり、それぞれの書き込みに数分以上かかることはありません。

于 2012-05-31T20:20:00.877 に答える