2017-05-11 4 views
0

私が何かを検索し、例外スローを見つからない場合はJava 7でパラメータとして受け取った別のメソッドを実行するメソッドを記述する方法は?

public static ViewInteraction findView(int id) { 
    return onView(allOf(withId(id), isDisplayed())); 
} 

public static ViewInteraction findView(int id, int index){ 
    return onView(allOf(withIndex(withId(id), index), isDisplayed())); 
} 

public static ViewInteraction findView(int id, String text) { 
    return onView(allOf(withText(text), withId(id))); 
} 

public static ViewInteraction findView(String text) { 
    return onView(allOf(withText(text), isDisplayed())); 
} 

これらのメソッドのようないくつかの方法があります。

私がしたいのは、これらのメソッドを実行するメソッドを書くことです。何度も何かを見つけて、最後に例外をスローすることができます。これらの方法に沿って他の10以上があります。

私は戦略パターンとコマンドパターンを使用しようとしましたが、それらが私のために機能しなかったか、またはそれらを実装する方法がわかりませんでした。解決策がそのうちの1つである場合は、明確な説明をするか、それとも答えをすることができますか?

私はそれらのチュートリアルを検索しましたが、すべてはとても短く、すぐに理解できる上級開発者ではありません。

ありがとうございました!

+4

これらの方法がどのように使用され、どのような結果が得られるかについてのコードを投稿することをお勧めします。 – Strelok

+0

それはそのメソッドが何をするかによって異なります。彼らが基本的に同じことをするが、異なるフィールドで操作する場合は、あなたの "クエリ"を記述するオブジェクトを渡すことができます。このオブジェクトには 'text'のようなフィールドが含まれていて、タイプはnullable(' null'は "使わない"という意味です)か、 'Optional '( 'isPresent()'はfalseを返す使用しないでください)か他の何か。そうすれば、おそらく複数のメソッドを呼び出す必要はありませんが、同じ方法で繰り返すことができます。 – Thomas

+0

正確な方法で質問を更新しました。彼らはエスプレッソで意見を見つけるために使われます。 –

答えて

0

検索方法に時間がかかることが想定されます。そうである場合、またはそれらの数が多い場合は、Java7に付属のScheduledThreadPoolExecutorを使用してください。submitすべてのタスクはCallablesとしてラップされ、使用可能な結果が得られるまでそれぞれ(get(long, TimeUnit)を使用してください)いくつかの一般的なタイムアウト後に停止することができます(後者を自分で実装する必要がありますが、これはSystem.nanoTime()で簡単です)。あなたがそうのようなあなたのメソッドをラップすることができます

Callable<ViewInteraction> method1 = new Callable<ViewInteraction>() { 
    @Override 
    public ViewInteraction call() throws Exception { 
     return findView(id, text); 
    } 
}; 

ただ、完全を期すため、Javaの8にあなたはむしろ

Callable<ViewInteraction> method2 =() -> findView(id, text); 

をこのようにしてください、あなたは、同時にすべてのメソッドを実行することができます(あなたはどのように多くのスレッドを選択することができますコール可能なものを処理しているので、1から始まり、すべてがより複雑になったときに後で並列処理を増やすことができます)。 findView()メソッドが例外の場合に備えて、get()ExecutionExceptionnを投げることに注意してください。

これが複雑すぎる場合でも、Callablesを使用してコマンドパターンを実装できます。

関連する問題