2016-09-19 101 views
6

我想做一個Android應用程序的單元測試,我需要從res.string資源中獲取一個字符串。我想測試的類是POJO類。我正在用兩種語言做這個應用程序,由於這個原因,我需要從資源中獲取一個字符串。問題是我無法獲得背景或活動,是可能的?我知道使用Instrumentation測試我可以做到這一點,但是在做儀器測試(黑盒測試)之前,我需要測試一些功能(白盒測試)。 這是我要測試功能:單元測試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和設定功能是:

@Before 
public void setUp() throws Exception { 

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

    alertaPOJO = new AlertaPOJO(); 
} 

感謝

回答

7

如果使用Context僅獲得String資源,我會被嘲笑只有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測試中,最重要的一,他們跑得更快。

3

,而你正在使用JVM單元測試你沒有一個真正的Android語境。對於你的情況,也許你可以嘗試Android Instrumentation Test,通常它是在你的項目的「androidTest」目錄中實現的。

+0

謝謝@Sherlock,我猜這是正確的答案,因爲我已閱讀,但我需要一個確認,因爲我是Android的初學者。 – Tachenko