3

現在、MonoTouch/MonoDroid でアプリを開発しており、テストを改善したいと考えています (xamarin studio を使用して Mac で作業しています)。シミュレーターで実行される統合テストを作成する方法を知っています (少なくとも iOS ユニット テスト プロジェクトを使用した iOS では)。

私が今やりたいのは、1 つの指定されたクラスをテストする (そして、どのデバイス/シミュレーターでも実行されない - 単体テストのみの) 小さなモックのみのテストを使用した TTD です。私はJavaでMockitoを使用してそれを行っていましたが、Moq 4.0を使用してモノソリューションで同じことを試みました。

そのためには、Mono から何も必要とせず、単純なクラスだけを必要とします。そこで、新しい N ユニット プロジェクトを作成して、クラスをそのプロジェクトにリンクしようとしました。しかし、コードをコンパイルするには、そのクラス (Xamarin.Mobile.Geolocator、RestSharp、Geo など) で使用しているすべての参照を含める必要があります。これを行うと、コードはコンパイルされますが、最初のテストを実行すると、System.Core のバージョン xy が利用できないというエラーが表示されます。問題は理にかなっています.ライブラリは、そのテストプロジェクトでは利用できないシステムライブラリの特定のモノバージョンを使用しています.

私が見る唯一の解決策は、これらの参照を回避し、コードで使用するすべてのライブラリ クラスに対して空のスタブを記述してコンパイルすることです。しかし、それは多くの無駄な作業であり、私は本当に避けようとしています.

長い話を簡単に言うと、xamarin mono でのテスト ファースト開発の作業セットアップを手伝ってくれる人はいますか? Moq のようなモッキング フレームワークを使用でき、シミュレーターで単体テストを実行する必要がない場所はどこですか? 重要なのは、サードパーティのライブラリをモックする (そしてコードをテスト プロジェクトでコンパイルする) 解決策もあるということです。

4

1 に答える 1

2

Xamarin 2 の新しいツールはまだ使用していません。ライセンスの有効期限が切れているため、VS で古い Mono for Android をまだ使用しています。

テストファーストのアプローチは、確かにプラットフォーム上の課題です。

モバイル固有のライブラリを間接的に分離する準備ができている場合の最善の方法は、.NET フレームワークを対象とする通常のクラス ライブラリ プロジェクトを作成し、テストするファイルを追加して、[リンクとして追加] オプションを選択することです。

もちろん、これが機能するには、プラットフォーム固有のロジックからドメイン ロジックを適切に分離する必要がありますが、さまざまなテスト/モック フレームワークの全機能にアクセスできます。

もう 1 つのオプションは、クロスプラットフォーム要素をポータブル クラス ライブラリ (PCL) に分離し、同じ方法でテストすることです。PCL ルートにはいくつかの長所と短所があります。詳細については、この回答を参照してください。

于 2013-03-16T14:27:42.850 に答える