APIエンドポイントからデータを取得するWebプロジェクトを作成しています。 APIレイヤーは、サービスレイヤーとリポジトリーレイヤーの最下部に位置しています。私はServiceとAPI Layersの単体テストを書いています。私は依存関係を模擬するためにMoqフレームワークを使用しています。 これで、MVCコントローラをテストします。私は、APIエンドポイントからデータを取得するためにHttpClientから派生したRequest Managerクラスを使用しています。では、どうすればこのコントローラをテストできますか?単体テストを作成しましたが、テストでは自分のデータベースから直接データを取得しています。APIエンドポイントからデータを取得するMVCコントローラをテストする
public class UserController : Controller
{
private RequestManager requestManager = new RequestManager();
// GET: User
public async Task<ActionResult> Index()
{
List<UserViewModel> allUsers = await requestManager.GetUsers();
if(allUsers == null)
{
throw new HttpException(404, "No Users Found");
}
return View(allUsers);
}
}
public class UserControllerTest
{
public UserController controller;
[OneTimeSetUp]
public void InIt()
{
controller = new UserController();
}
[Test]
public async Task TestIndex()
{
var view = await controller.Index() as ActionResult;
Assert.That(view is ViewResult);
Assert.That(view.Model is List<UserViewModel>);
}
}
抽象的な離れたタイトカップリングとマージ/置換が可能なように依存関係を公開するため、単体テスト時の柔軟性が向上します。あなたはコードのテスト容易性を向上させるためにリファクタを考慮する必要があります。いずれか、またはあなたのhttpclient派生マネージャクラスでカスタムメッセージハンドラを使用することについて考えてください – Nkosi
私は私のコントローラにIRequestManagerインターフェイスを注入して模擬しなければならないようです。カスタムメッセージハンドラはどのように役立ちますか? –