2016-09-19 2 views
6

Я пытаюсь выполнить единичный тест для приложения для Android и мне нужно получить строку из ресурсов res.string. Класс, который я хочу протестировать, является классом POJO. Я делаю приложение на двух языках, из-за этого мне нужно получить строку из ресурса. Проблема в том, что я не могу получить контекст или активность, возможно? Я знаю, что с помощью Instrumentation test я могу это сделать, но мне нужно проверить некоторые функции (тест белого ящика), прежде чем выполнять контрольно-измерительный тест (тест черного ящика). Это функция, которую я должен тест:Unit test 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))

Если я ставлю «Mon» вместо 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 Instrumentation Test, как правило, он реализован в директории «androidTest» вашего проекта.

+0

Спасибо @Sherlock, я думаю, что это был правильный ответ, поскольку я прочитал, но мне нужно было одно подтверждение из-за того, что я новичок в Android. – Tachenko