2016-09-19 15 views
6

Tôi đang cố gắng thực hiện kiểm tra đơn vị cho ứng dụng android và tôi cần nhận chuỗi từ tài nguyên res.string. Lớp mà tôi muốn kiểm tra là một lớp POJO. Tôi đang làm các ứng dụng trong hai ngôn ngữ, do điều này, tôi cần phải nhận được một chuỗi từ tài nguyên. Vấn đề là tôi không thể có được bối cảnh hoặc hoạt động, có thể không? Tôi biết rằng với thử nghiệm Instrumentation tôi có thể làm điều đó, nhưng tôi cần phải kiểm tra một số chức năng (kiểm tra hộp màu trắng) trước khi làm bài kiểm tra thiết bị đo đạc (thử nghiệm hộp đen). Đây là chức năng mà tôi có để kiểm tra:Kiểm tra đơn vị Android, getString từ tài nguyên

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

Và đây là bài kiểm tra:

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

Nó sụp đổ khi cố gắng để làm context.getResources().getString(R.string.sInicialLunes))

Nếu tôi đặt 'Môn' thay vì context.getResources().getString(R.string.sInicialLunes)) hoặc 'L' nó hoạt động hoàn hảo như vậy, có thể có được bối cảnh hoặc hoạt động để truy cập vào thư mục tài nguyên?

Tôi đang thử nghiệm với Mockito và chức năng thiết lập là:

@Before 
public void setUp() throws Exception { 

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

    alertaPOJO = new AlertaPOJO(); 
} 

Cảm ơn

Trả lời

7

Nếu bạn đang sử dụng Context chỉ cho việc thu thập String tài nguyên, tôi sẽ đi bằng cách chế giễu chỉ getResources().getString() phần như thế này (xem ký hiệu 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); 
    } 
} 

Có rất nhiều lý do để ở lại với các bài kiểm tra JVM, quan trọng nhất một, chúng đang chạy nhanh hơn.

3

Bạn không có một bối cảnh android thực trong khi bạn đang sử dụng thử nghiệm đơn vị JVM. Đối với trường hợp của bạn, có thể bạn có thể thử Thử nghiệm thiết bị Android, thông thường nó được thực hiện trong thư mục "androidTest" của dự án của bạn.

+0

Cảm ơn bạn @Sherlock, tôi đoán rằng đó là câu trả lời đúng như tôi đã đọc nhưng tôi cần một xác nhận do tôi là người mới bắt đầu trong Android. – Tachenko

Các vấn đề liên quan