4

だから私は最近、モバイル アプリケーションで Xamarin.UITest を使い始めました。UI、ナビゲーションなどのテストには最適ですが、アプリの他のすべての部分、つまりデータベース、Web 接続、モデルなどをテストする最善の方法については、少し混乱しています。プロジェクトは、共有プロジェクトを使用したクロスプラットフォームです。

これらの他のテストは、UITests と一緒に使用する必要がありますか?それとも、独自の別のプロジェクトが必要ですか? さらに、OSX 上の Xamarin Studio では、iOS アプリ全体をビルドして起動することなく、特に .Net のみのコードをテストする方法はありますか?

ありがとう

4

2 に答える 2

10

この質問は本当に広いです。

UI テストは UI 自体のみをテストする必要があります

  • ナビゲーションは正しく機能しますか?
  • すべてが正常に表示されていますか?
  • UI コンポーネントは表示可能か、有効か、読み取り専用かなど。
  • コンポーネントは正しいデータを表示しますか?

ビジネス ロジックは単体テスト プロジェクトでテストする必要があります

  • クラスは受信データを正しく処理していますか?
  • すべてのケースで、正しいパラメーターを使用して正しいメソッドをトリガーしますか?
  • Web サービス、データベース、またはサードパーティ ライブラリへの正しい呼び出しを準備していますか? (ここでは、他のソフトウェアの正しい動作をテストしません)
  • 期待どおりに例外をスローしますか?

単体テストは、バグの修正と回避に最も役立ちます。これらは一般に、高品質のコードにとって他のすべてのテストよりもはるかに重要です。

統合テストは残りをテストするために使用されます

  • データベース、Web サービス、ファイル システム、オペレーティング システム API は期待どおりに動作しますか?
  • すべてが正しく連動していますか?
  • それはすべて十分に速く動作しますか?

優れたテストに関する優れた書籍やリンクが多数あります。ここでそれをするのはやりすぎです。

ほんの数例:

これらのリンク、StackOverflow および Google を使用すると、単体テストを別のプロジェクトに置く必要があることがわかります。UI テストでは、ビジネス ロジックを可能な限りモックします。すべてのコードをテストしないようにします。そうしないと、ビジネス ロジック内の変更のために UI テストが失敗することがよくあります。単体テストを変更するたびに、UI テストを変更する必要があります。それはすぐに迷惑でイライラします。

于 2015-08-22T11:55:57.987 に答える
0

あなたが尋ねている主なシナリオは、統合テストです。

テストは UI レイヤーからアプリを駆動するため、もちろんアプリ内のすべてのコードを呼び出し、すべてのバックエンド システムにアクセスします。しかし、アプリとそれをサポートする一連のバックエンド サービスがすべて正常に動作することを検証したいと考えています。

まず、バックエンド サービスに関するデータをテストに公開する方法が必要です。アプリはおそらく REST API とデータベースを使用しているため、これは既に行っています。テストの場合は、実際のデータを誤って公開する危険がない場所で、ステージングまたは運用前のエンドポイントに対してのみこれを実行することをお勧めします。バックエンド サービスに関する情報を提供する単純な RESTful API を構成し、それをテストから呼び出すことができます。また、API を呼び出すバックドア メソッドを使用して、テストから追加の API 呼び出しを行う必要がないようにすることもできます。新しいユーザーを作成する基本的な例を見てみましょう。

テスト コードは次の擬似コードのようになります。

var uniqueUser = Guid.NewGuid().ToString();
app.EnterText(firstName, "Test 1");
app.EnterText(lastName, uniqueUser);
app.Tap(createUserButton);
app.WaitForNoElement(e => e.Id("progress"));
app.WaitForElement(e => e.Text("User successfully created"));

// At this point, call your API using RestSharp or whatever makes sense for you 

string endpoint = "https://my.server.net/user/getByLastName/" + uniqueUser;    
var client = new RestClient(endpoint);
var result = ExecuteRequestHereAndItShouldReturnUserJSON();
Assert.IsTrue(result != null && result.FirstName == "Test 1");

そのタイプのこと。

ティアダウンでは、テスト クラウド内の何千ものデバイスによって作成されたテスト ユーザーでデータベースが詰まるのを避けるために、ID でテスト ユーザーを削除するメソッドを呼び出す必要があります。現在の設定に応じて、バックドアまたは REST のいずれか安全な方を介してこれを行うことができます。

コード自体のテストに関しては、別の単体テスト プロジェクトを作成し、NUnit を使用するだけです。他の回答にリストされているテストに関する多くの優れたリソースがあり、優れた単体テストの作成方法、モッキングの使用時期/方法などを理解するのに役立ちます。

于 2015-09-01T00:53:53.737 に答える