2015-05-19 26 views
21

Tôi phải xây dựng một ứng dụng có sử dụng sqlite. Bây giờ tôi muốn viết các bài kiểm tra đơn vị của mình. Những bài kiểm tra đơn vị này nên kiểm tra lớp học của tôi SQLiteBridge. SQLiteBridge cung cấp DAO cho mọi loại Mô hình con.Android JUnit4 Testing - Nhận ngữ cảnh từ đâu?

Bây giờ tôi đã gặp sự cố rằng tôi cần bối cảnh để tạo SQLiteBridge của mình. SQLiteBridge tạo và xử lý cơ sở dữ liệu SQLite trên hệ thống ..

Nơi lấy đối tượng ngữ cảnh từ đâu?

Thiết lập của tôi cũng giống như ở đây (vì vậy tôi đang sử dụng Junit4 [nhờ thần]): http://tools.android.com/tech-docs/unit-testing-support

EDIT: Tôi hy vọng có một cách như cũ AndroidTestCase để mở rộng mà không làm mất Junit4. :)

Trả lời

50

Như được mô tả ở đây: https://code.google.com/p/android-test-kit/wiki/AndroidJUnitRunnerUserGuide Sử dụng thiết bị đo đạcĐể có được ngữ cảnh.

Tuy nhiên, nếu bạn gọi trực tiếp InstrumentationRegistry.getContext(), bạn có thể nhận được ngoại lệ khi mở cơ sở dữ liệu của mình. Tôi tin rằng điều này là bởi vì bối cảnh được trả về bởi getContext() trỏ đến bối cảnh của thiết bị đo hơn là thử nghiệm ứng dụng/đơn vị của bạn. Thay vì sử dụng InstrumentationRegistry.getInstrumentation().getTargetContext()

Ví dụ:

@RunWith(AndroidJUnit4.class) 
public class SqliteTest { 

    Context mMockContext; 

    @Before 
    public void setUp() { 
     mMockContext = new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_"); 
    } 
} 

Các RenamingDelegatingContext chỉ đơn giản là tiền tố tên tập tin/cơ sở dữ liệu với test_ để ngăn cản bạn ghi đè lên dữ liệu mà bạn có thể có trong mô phỏng tương tự.

+0

Tôi vừa thử nó và nó đã hoạt động! Tôi nghĩ rằng tôi sẽ sử dụng Robolectric .. nhưng cảm ơn cho giải pháp này! :) –

+0

Tôi đã thử điều này và nó hoạt động, nhưng tiền tố đang bị bỏ qua và do đó cơ sở dữ liệu "thực" đang được sử dụng trong thử nghiệm. Bất kỳ ý tưởng về lý do tại sao điều này có thể xảy ra? – moarCoffee

+3

InstrumentationRegistry không thể được giải quyết như một biểu tượng –

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