cuốn sách gpt4 ai đã làm

Kiểm tra Android JUnit để biết các tùy chọn

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:15:08 26 4
mua khóa gpt4 Nike

Một tình huống khá bình thường: một ứng dụng Android có Hoạt động tùy chọn và việc chọn một tùy chọn từ mã kích hoạt ListPreference sẽ thay đổi văn bản tóm tắt của ListPreference đó. Tức là: chọn "Xanh" từ Color ListPreference sẽ vượt qua trênPreferenceChange Cuộc gọi lại thay đổi văn bản tóm tắt của ListPreference thành "xanh".

Tôi muốn có thể sử dụng các bài kiểm tra Android JUnit để xác nhận rằng những thay đổi tóm tắt này đều được thực thi chính xác. Tuy nhiên, dường như có rất ít thông tin về cách thực hiện việc này.

Tôi đã thử sử dụng trên ListPreference setValue() Biến thể của, trong chuỗi thử nghiệm và đã vượt qua runOnUiThread() Không thành công - điều này không kích hoạt cặp onPreferenceChange() gọi. đang gọi điện setValue() Sau đó tôi cũng đã thử getInstrumentation().waitForIdleSync(), nhưng điều này cũng thất bại.

Vì vậy, câu hỏi của tôi là: việc này được thực hiện như thế nào?

Cảm ơn!

câu trả lời hay nhất

Một vài giờ làm việc đã tạo ra giải pháp hiệu quả này, nhưng tôi tò mò liệu có ai có giải pháp tốt hơn không. Mã này được lấy cảm hứng từ giải pháp nàyCâu hỏi tương tự, nhưng tình huống này khác nhau theo hai cách:

  1. Nó được thiết kế để sử dụng bởi Android JUnit, có nghĩa là nó cần phải được thông qua runOnUiThread() Gọi giao diện người dùng ListPreference khi nhấp chuột.
  2. Nó dự kiến ​​sẽ sử dụng các danh mục tùy chọn, điều này làm phức tạp việc tìm nơi nhấp chuột (so với toàn bộ danh sách tùy chọn). Giải pháp trên chỉ hoạt động khi không có danh mục ưu tiên.

Phương thức này sẽ chấp nhận khóa của mục ListPreference cụ thể và vị trí trong danh sách mục cần nhấp vào. Sau đó, nó sẽ thực hiện nhấp chuột vào mục danh sách đó và mã khác sẽ thực hiện kiểm tra mà tôi đang tìm kiếm.

Xin lưu ý rằng điều này đòi hỏi cài đặt() Được gọi trong phương thức getActivity() đã đặt trước đó setActivityInitialTouchMode(true);.

khoảng trống riêng tư clickListPreference(String _listPreferenceKey, int _listItemPos){
chuỗi cuối cùng listPreferenceKey = _listPreferenceKey;
cuối cùng int listItemPos = _listItemPos;

mActivity.runOnUiThread(
mới có thể chạy được() {
công khai void run() {
// lấy một điều khiển cho ListPreference cụ thể
ListPreference listPreference= (ListPreference) mActivity.findPreference(listPreferenceKey);

// xuất hiện hộp thoại
mActivity.getPreferenceScreen().onItemClick( null, null, getPreferencePosition(), 0 );

// nhấp vào mục được yêu cầu
AlertDialog listDialog = (AlertDialog) listPreference.getDialog();
ListView listView = listDialog.getListView();
listView.performItemClick(listView, listItemPos, 0);
}

/***
* Khó tìm một ListPreference khi có các Danh mục ưu tiên,
* vì chính tiêu đề danh mục được tính là một vị trí trong màn hình tùy chọn
* danh sách.
*
* Phương pháp này lặp lại các mục ưu tiên bên trong các danh mục ưu tiên
* để tìm ListPreference mong muốn.
*
* @return Vị trí của ListPreference so với toàn bộ danh sách màn hình tùy chọn
*/
int riêng tư getPreferencePosition(){
bộ đếm int = 0;
Màn hình PreferenceScreen = mActivity.getPreferenceScreen();

// lặp qua các danh mục
for (int i = 0; i < screen.getPreferenceCount(); i++){
PreferenceCategory cat = (PreferenceCategory) screen.getPreference(i);
bộ đếm++;

// lặp qua các mục danh mục
for (int j = 0; j < cat.getPreferenceCount(); j++){
if (cat.getPreference(j).getKey().contentEquals(listPreferenceKey)){
bộ đếm trở lại;
}
bộ đếm++;
}
}
trả về 0; // không khớp
}
}
);

getInstrumentation().waitForIdleSync();
}

Về thử nghiệm tùy chọn Android JUnit, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/6932608/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress