2016-09-19 22 views
6

Bir android uygulaması için bir birim testi yapmaya çalışıyorum ve res.string kaynaklarından bir dize almam gerekiyor. Test etmek istediğim sınıf bir POJO sınıfı. Uygulamayı iki dilde yapıyorum, bunun nedeni ile, kaynaktan bir dize almam gerekiyor. Sorun, içeriği veya faaliyeti alamam, mümkün mü? Enstrümantasyon testi ile bunu yapabileceğimi biliyorum, fakat enstrümantasyon testini yapmak için bazı fonksiyonları (beyaz kutu testi) test etmem gerekiyor (kara kutu testi). Bu Testten zorunda fonksiyonudur:Birim testi Android, getString kaynağından

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; 
    } 
} 

Ve bu test:

@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); 
} 

Ben 'Mon' koyarsanız deneyin context.getResources().getString(R.string.sInicialLunes))

yapmak ne zaman çökmesine yerine context.getResources().getString(R.string.sInicialLunes)) veya 'L' mükemmel çalışıyor, kaynak klasörüne erişmek için içeriği veya etkinliği almak mümkün mü?

Ben Mockito ile test ediyorum ve Kurulum fonksiyonudur:

@Before 
public void setUp() throws Exception { 

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

    alertaPOJO = new AlertaPOJO(); 
} 

Teşekkür

cevap

7

sadece String kaynak elde etmek için Context kullanıyorsanız, böyle sadece getResources().getString() bölümünü alay yoluyla gider (JUnit4 notasyonu bakınız):

@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); 
    } 
} 

en önemli JVM testleri ile kalmak için birçok neden vardır Bir, onlar daha hızlı koşuyorlar.

3

Eğer JVM birim testini kullanırken Sen gerçek android Bağlam yok. Sizin durumunuz için, belki Android Instrumentation Testini deneyebilirsiniz, projenizin "androidTest" dizininde uygulanır.

+0

Teşekkür ederim @Sherlock, sanırım okudum doğru cevap oldu ama Android'de yeni başlayan biri olduğum için bir onay gerekiyordu. – Tachenko