web-dev-qa-db-ja.com

MVCはコードのテスト容易性をどのように向上させますか?

MVCデザインパターンをAndroid=開発者として学び、コードのテスト容易性を促進しているのを見てきました。この概念を理解しましたが、実際にはイライラしています。

これが実際の例でどのように達成されるかを誰かが説明できますか?

2
Amine

MVCはモデルビューとコントローラーの略です。 MVCを単一責任の原則の拡張と見なすことができます。これらの各コンポーネントが変更される理由は異なります。

モデル:ビジネスをモデル化します。 httpとrestの詳細は、このコンポーネントには含まれていません。アプリケーションをデスクトップアプリケーションにする場合は、モデルコンポーネントを再利用できることが理想的です。

The View:にはビューの詳細があります。それらは主に入出力に関するものです。このコンポーネントは、モデルコンポーネントに依存する場合があります。結局、ここではモデルのデータを表示しています。

The Controller:戻りコードなどのHTTPの問題を考慮して、モデルとビューをバインドします。

Android=開発者としてMVC設計パターンを学習しており、コードのテスト容易性を促進することがわかりました。

これがどのようにテスト容易性を改善するかというあなたの質問に行きます。テストにはさまざまなタイプがあります。この質問に答えるには、さまざまな種類のテスト方法の機能と制限を理解することが重要です。テストには多くの種類があり、単体テスト、統合テスト、システムテストを見ることができます。

単体テスト:理想的には、単体テストは迅速に実行し、結果を迅速に提供する必要があります。 HTTPコールまたはデータベースコールの詳細は、モックアウトされることがよくあります。これは、ビジネスロジックのテストに非常に適しています。これらは多くの場合、完全に自動化され、ビルドと統合されています。

統合テスト:統合テストは、ビジネスとテストのさまざまな側面を統合します。また、インフラストラクチャの側面を統合してテストすることもできます。その単体テストの実行には少し時間がかかります。多くの場合、完全に自動化できます。

システムテスト:これはシステムを完全にテストしています。多くの場合、時間がかかります。 Seleniumなどのツールを使用して自動化できます。彼らは何度も手動でドンです。

テストを簡単にする方法:コードをこれら3つのコンポーネント(モデル、ビュー、コントローラー)に分離するとき。モデルにはすべてのビジネスロジックが含まれます。コードベースの大部分はモデルコンポーネントに含まれます。インフラストラクチャコードをモックアウトすることで(DBとの通信や他のHTTP呼び出しなど)、このコンポーネントを完全に単体テストできます。

UIが存在すると、単体テストは不可能ではないにしてもかなり困難になります。また、単体テストによるアプリケーションのWebサーバーの側面のテストも少し難しいです。このコードをビューとコントローラーに分離すると、モデルを単体テストしやすくなります。

これは、非常に迅速な単体テストでほとんどのコードをテストし、統合とシステムテストを減らして他の側面をテストできることでした。

概要:

  • MVCでは、モデルは何にも依存せず、ビューはモデルに依存し、コントローラーはビューとモデルに依存します。
  • AがBに依存していて、Bが単体テスト可能でない場合、Aは単体テスト可能ではありません。
  • ビューとコントローラーは単体テスト可能ではありません(または少なくとも単体テストが困難です)。
  • MVCでは、ほとんどのコードがモデル内にあります。
  • モデルをビューとコントローラーに依存しないようにすることで、モデル(ほとんどのコード)が単体テスト可能になります。