2014-07-08 16 views
12

Trong các bài kiểm tra robolectric của tôi, tôi đang cố đọc một tệp. Vì tệp này chỉ chứa dữ liệu thử nghiệm tôi đã đặt nó vào nội dung của các thử nghiệm.Sử dụng tài sản trong các bài kiểm tra robolectric

Cấu trúc thư mục trông như thế này.
src/main/assets/prod_data_file
src/test/assets/test_data_file

Tuy nhiên khi tôi cố gắng để đọc các tập tin bằng cách getShadowApplication().getAssets().open(MY_FILE_PATH) nó mang lại cho tôi FileNotFoundException.

Có ai biết cách sửa lỗi này không?

+0

Bạn phải đặt tệp của mình vào thư mục nội dung. Sau đó sử dụng tên tệp cho 'InputStream là = getResources(). GetAssets(). Open (filename);'. – greenapps

+1

nội dung trong thư mục kiểm tra? hoặc nội dung trong thư mục ứng dụng? – ankitrokdeonsns

+0

Hmmm? Xin lỗi tôi biết không có thư mục thử nghiệm nào trong môi trường Eclipse. Tôi cũng không biết thư mục ứng dụng. Ment là thư mục tài sản của dự án. – greenapps

Trả lời

13

Vì thử nghiệm của tôi chỉ đọc các tệp này và trả về dữ liệu tệp dưới dạng String Tôi có thể thực hiện điều đó qua getClass().getClassLoader().getResourceAsStream(MY_FILE_PATH) và sau đó đọc tệp. Không thực sự cần phải đọc để sử dụng getShadowApplication().getAssets().open(MY_FILE_PATH).

Tôi vừa chuyển các tệp dữ liệu thử nghiệm của mình sang src/test/resources và đã hoạt động. :)

+0

Lý do, tại sao bạn nhận được lỗi này là nhiệm vụ kiểm tra (không phải androidTest) được sử dụng kiểm tra đơn vị fro, và không có tài sản nào được sao chép cho các tác vụ này (tính đến tháng 5) 2015). Vì vậy, mặc dù AS độc đáo làm nổi bật các thư mục tài sản trong 'src/test' nó không có liên quan nào cả. Không có APK nào được xây dựng, vì vậy thông thường bạn không thể truy cập vào nội dung, chỉ có robolectric mới cung cấp cho bạn khả năng làm như vậy. –

+0

Cảm ơn nó đã cứu tôi một ngày –

+0

Tuyệt vời, cảm ơn! Các tệp này đang bị loại trừ khỏi gói phát hành hoặc tệp aar. –

0

tôi đã có thể làm cho nó như thế này:

1) Copy (hoặc tạo) AndroidManifest.xml trong kiểm tra thư mục

2) Thêm @Config(emulateSdk = 18, manifest = "src/test/AndroidManifest.xml") cho thử nghiệm này cụ thể

tôi đã có thể Đọc tài liệu. Vì vậy, nó có nghĩa là bạn có thể chơi với AndroidManifest lớp và Á hậu tùy chỉnh (thêm cảm hứng ở đây https://groups.google.com/forum/#!topic/robolectric/YvbdqRFcdnA)

Tôi nghĩ rằng nó có thể là cũng có thể chơi với build.gradle:

android { 
    sourceSets { 
    androidTest.setRoot('src/test') 

    androidTest { 
     assets.srcDir file('src/test/assets') 
    } 
    } 
} 

nhưng tôi không chắc chắn kể từ khi cắm doesn không tạo bất kỳ biến thể xây dựng nào mà chỉ là các tác vụ.

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