2016-12-08 21 views
0

私はXamarin.Formsアプリケーションを作成しています.UITestを使用して、自分のViewの正しい動作をテストしたいと思います。ビューは、ボタンのクリックなどのようなユーザーの入力に反応するだけではありません。代わりに、1つの要素を隠し、この時点で別の要素を表示するようなビューの変更につながるバックグラウンド操作があります。もう1つの例は、バックグラウンド操作によって生成される要素をListViewに埋め込むことです。これらの変更は、そのプロパティがViewにバインドされているViewModel上で行われます。 ここでは、バックグラウンド操作をシミュレートして、ビューが正しく動作することをテストします。しかし、私はTestModelを操作することはできませんが、UITestプロジェクトでは、TestクラスのXamarin.Formsを参照できないためです。 このようにアプリケーションをテストすることは意図されていないようです。アプリケーション全体はUITestのブラックボックスであり、マウスとキーボードの入力だけで対話できます。 私のアプリの内部、たとえば対応するViewModelにどうやってアクセスできますか? 私は既にこの問題を検索しましたが、何も見つかりませんでした。たぶん私は間違った方向に向かっています。 ご協力いただければ幸いです。Xamarin.UITestを使用してバックグラウンドアクティビティを偽装する方法

答えて

0

バックドアを使用してプラットフォームプロジェクトのメソッドにアクセスすることができます。そこから、アプリケーションプロジェクトがFormsコアプロジェクトを参照するため、フォームコードにアクセスできるはずです。参照:MainActivityで

https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

は、Androidプロジェクトでのバックドアメソッドを作成します

[Export("MyBackdoorMethod")] 
// Can optionally take a parameter of string, int, or bool. 
// Can optionally return string or Java.Lang.String. 
public void MyBackdoorMethod() 
{ 
    // In through the backdoor - do some work. 
} 

をテストからAndroidのバックドアのメソッドを呼び出すには:

app.Invoke("MyBackdoorMethod"); 

のiOSでバックドアメソッドを作成します。プロジェクト:

In AppDelegate:

[Export("myBackdoorMethod:")] // notice the colon at the end of the method name 
// Must take an NSString and return an NSString. 
public NSString MyBackdoorMethod(NSString value) 
{ 
    // In through the backdoor - do some work. 
} 

テストからiOSのバックドアメソッドを呼び出すために:リンクで

app.Invoke("myBackdoorMethod:", "the value"); 

詳細が、これは1が軌道に乗るために十分です。

+0

ありがとうございます。これはちょっと面倒ですが、行く方法があります。そしてそれはまったく同じですか?私のUIコントロールがUIで再び可視化されないICommandを開始する場合。私はバックドアの方法でテストアサートをすることができないと思いますか? –

+0

いいえ、プラットフォームコードにアサートを入れることはできませんが、テストできるバックドアメソッドから何かを返すことができます。 – jgoldberger

関連する問題