2012-05-23 20 views
5

Đây là một đoạn hoạt động của tôi:làm cách nào để tôi có thể thử bối cảnh bằng Mockito và Robolectric?

public class Search extends Activity 
{ 
    private String TAG = "SEARCH"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.search); 
     Log.d(TAG, "About to call initialastion"); 
    //  new InitialisationTask(this).execute(); 
    } 
} 

Với dòng nhận xét trên, tôi hạnh phúc có thể tạo ra và thực hiện các bài kiểm tra đơn vị như sau:

@RunWith(RobolectricTestRunner.class) 
public class SearchTest { 
    private Search searchActivity; 
    private Button searchButton; 
    private Button clearButton; 
    private Button loginButton; 
    private Button registerButton; 
    private EditText searchEditText; 

    @Before 
    public void setUp() throws Exception { 
     searchActivity = new Search(); 
     searchActivity.onCreate(null); 

     searchButton = (Button) searchActivity.findViewById(R.id.btnPlateSearch); 
     clearButton = (Button) searchActivity.findViewById(R.id.btnClearSearch); 
     loginButton = (Button) searchActivity.findViewById(R.id.btnLogin); 
     registerButton = (Button) searchActivity.findViewById(R.id.btnRegister); 
     searchEditText = (EditText) searchActivity.findViewById(R.id.editTextInputPlate); 
    } 


    @Test 
    public void assertSearchButtonHasCorrectLabel() 
    { 
     assertThat((String) searchButton.getText(), equalTo("Search")); 
    } 
} 

Tuy nhiên, nếu tôi bỏ ghi chú dòng new InitialisationTask(this).execute(); trong hoạt động của tôi, các thử nghiệm của tôi bắt đầu thất bại, rất có thể là do tham chiếu đến this.

Cách tiếp cận tốt nhất để chế nhạo bối cảnh là gì?

Tôi đã cố gắng thêm contextMock = mock(Context.class); vào setUp() của tôi tuy nhiên tôi không chắc chắn làm thế nào tôi có thể thiết lập mô hình này "thành" các searchActivity

Cảm ơn

+0

Bạn có thể chia sẻ mã của nhiệm vụ của bạn? –

Trả lời

4

Để nhận được bối cảnh của hoạt động hoặc ứng dụng bạn có thể sử dụng:

Robolectric.getShadowApplication().getApplicationContext(); 

Ví dụ:

Context context = Robolectric.getShadowApplication().getApplicationContext(); 

Bây giờ hãy sử dụng biến ngữ cảnh.

+0

Lưu ý đây là câu trả lời cho Robolectric 2.x trở lên. –

9

Đối robolectric 3.0, để có được những đối tượng Context bạn chỉ cần sử dụng:

RuntimeEnvironment.application.getApplicationContext(); 

Trong mã của bạn ở trên, bạn không cần phải tạo ra một cách rõ ràng các đối tượng hoạt động và gọi đó là phương thức onCreate() phương pháp. Robolectric có thể thiết lập hoạt động cho bạn bằng cách sử dụng:

searchActivity = Robolectric.setupActivity(SearchTest.class); 
2

Tôi đang sử dụng Robolectric 3.2. Đây là những gì tôi đã sử dụng:

ShadowApplication.getInstance().getApplicationContext();

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