2016-09-19 3 views
6

私はアンドロイドアプリの単体テストをしようとしています。res.stringリソースから文字列を取得する必要があります。私がテストしたいクラスはPOJOクラスです。私は2つの言語でアプリをやっています。そのため、リソースから文字列を取得する必要があります。問題は、私が文脈や活動を得ることができないことです。それは可能ですか?インストルメンテーションテストではできることは分かっていますが、インストルメンテーションテスト(ブラックボックステスト)を行う前にいくつかの機能(ホワイトボックステスト)をテストする必要があります。 これは私がテストを持っている機能である:ユニットテストAndroidからのgetString

public void setDiaByText(String textView) { 
    getll_diaSeleccionado().clear(); 
    if (textView.contains(context.getResources().getString(R.string.sInicialLunes))) { 
     getll_diaSeleccionado().add(0); 
     getIsSelectedArray()[0] = true; 
     getI_idiaSeleccionado()[0] =1; 

    } else 
    { 
     getIsSelectedArray()[0] = false; 
     getI_idiaSeleccionado()[0] =0; 
    } 
} 

そして、これはテストです:

@Test 
public void setDiaByTextView() { 
    String texto = "L,M,X,J,V,S,D"; 

    alertaPOJO.setDiaByText(texto); 

    assertEquals(alertaPOJO.getIsSelectedArray()[0], true); 
    assertEquals(alertaPOJO.getI_idiaSeleccionado()[0], 1); 
} 

試みがcontext.getResources().getString(R.string.sInicialLunes))

を行うことをするとき、私は代わりに「月」を置けばそれがクラッシュcontext.getResources().getString(R.string.sInicialLunes))または 'L'は完全に動作するので、リソースフォルダにアクセスするためにコンテキストやアクティビティを取得することは可能ですか?

私はMockitoとセットアップ機能をテストしていがある:あなたがJVMのユニットテストを使用している間、あなたは本当のアンドロイドコンテキストを持っていない

@Before 
public void setUp() throws Exception { 

    MockitoAnnotations.initMocks(this); 
    mContext = Mockito.mock(Alerta.class); 
    Mockito.when(mContext.getApplicationContext()).thenReturn(mContext); 

    alertaPOJO = new AlertaPOJO(); 
} 

おかげ

答えて

7

だけStringリソースを取得するためのContextを使用している場合、私はこのようなだけgetResources().getString()一部をからかっで行くでしょう(JUnit4表記を参照してください):

@RunWith(MockitoJUnitRunner.class) 
public class AlertaPOJOTest { 

    @Mock 
    Context mMockContext; 

    @Test 
    public void setDiaByTextView() { 
    String texto = "L,M,X,J,V,S,D"; 
    when(mMockContext.getString(R.string.R.string.sInicialLunes)) 
     .thenReturn(INITIAL_LUNES); 


    alertaPOJO.setDiaByText(texto); 

    assertEquals(alertaPOJO.getIsSelectedArray()[0], true); 
    assertEquals(alertaPOJO.getI_idiaSeleccionado()[0], 1); 
    } 
} 

、最も重要なJVMのテストに滞在する多くの理由があります1つ、彼らはより速く走っています。

3

。あなたの場合は、おそらくAndroid Instrumentation Testを試すことができます。通常は、あなたのプロジェクトの "androidTest"ディレクトリに実装されています。

+0

ありがとうございました@Sherlock、私はそれが正解であったと思いますが、私は読んでいたと思いますが、私はAndroidの初心者のために1つの確認が必要でした。 – Tachenko

関連する問題