2013-12-09 8 views
9

私はノンアンドロイドメソッドロジックをテストする通常のJUnitテストケースを持っています。このメソッドはTextUtils.isEmpty()のようなものにTextUtilsを使用します。Androidユニットのテスト - コードがアンドロイドクラスを参照するときのベストプラクティス

TextUtilsクラスを取り込むだけでAndroidTestCaseにするのは意味がありません。この単体テストを測定するためのより良い方法はありますか?テストプロジェクトなどにandroid.jarを追加するといいですか?

Contextオブジェクトを模擬したい別のテストと同様の状況です。私はそれをAndroidTestCaseを拡張させずに嘲笑することはできません。私が非アンドロイドロジックをテストしようとしているのに、エミュレータ上で動作させたくない状況でベストプラクティスはありますが、アンドロイドクラスに触れていますか?

あなたは

+0

を追加する必要がありますより良い "と"最高 "ここ? –

+0

基本的には、エミュレータでアプリケーションを実行せずにテストケースを作成したいですか? – user2511882

答えて

3

おそらくテストは純粋なJavaで実行することができますので、それは、Android SDKのほとんどを皮肉っhttp://robolectric.org/

を見ていただきありがとうございます。これは、通常のデスクトップVMでより高速に実行できることを意味します。

このようなスピードで、テスト駆動開発が可能になります。

5

あなたのAndroidコードのテストを実行する2つのオプションがあります。最初に、システムにadbを接続することによってコードをテストできるインストルメント済みのテストオプションがあります。

第2のより機能的な方法は、JUnitテストです。ここでは、Javaクラスだけがテストされ、他のすべてのAndroid関連のものが侮られます。

使用PowerMockito

あなたのクラス名の上にこれを追加し、他のCUTクラス名(テスト対象のクラス)

@RunWith(PowerMockRunner.class) 
@PrepareForTest({TextUtils.class}) 
public class ContactUtilsTest 
{ 

が含まれ、このあなたの@Beforeに

@Before 
public void setup(){ 
PowerMockito.mockStatic(TextUtils.class); 
mMyFragmentPresenter=new MyFragmentPresenterImpl(); 
} 

これを追加PowerMockitoは、TextUtils内のメソッドのデフォルト値を返します。

たとえばのは、あなたの実装がで、その文字列が空であるかどうかをチェックしたりされていないとしましょうあなたの@Test

when(TextUtils.isEmpty(any(CharSequence.class))).thenReturn(true); 
//Here i call the method which uses TextUtils and check if it is returning true 
assertTrue(MyFragmentPresenterImpl.checkUsingTextUtils("Fragment"); 

また、あなたが "でどういう関連のGradle depedencies

testCompile "org.powermock:powermock-module-junit4:1.6.2" 
testCompile "org.powermock:powermock-module-junit4-rule:1.6.2" 
testCompile "org.powermock:powermock-api-mockito:1.6.2" 
testCompile "org.powermock:powermock-classloading-xstream:1.6.2" 
関連する問題