21

Tôi muốn bắt đầu với môi trường kiểm tra nhất quán, vì vậy tôi cần đặt lại/xóa tùy chọn của mình. Đây là thiết lập cho thử nghiệm tôi có cho đến nay. Nó không báo cáo bất kỳ lỗi nào và các thử nghiệm của tôi vượt qua, nhưng các tùy chọn không bị xóa.Android: Làm cách nào để đặt lại/xóa tùy chọn ứng dụng trong khi kiểm tra đơn vị?

Tôi đang thử nghiệm hoạt động "MainMenu", nhưng tôi tạm thời chuyển sang hoạt động OptionScreen (mở rộng lớp PreferenceActivity của Android). Tôi thấy kiểm tra chính xác mở OptionScreen trong khi chạy.

public class MyTest extends ActivityInstrumentationTestCase2<MainMenu> { 

...

@Override 
    protected void setUp() throws Exception { 
    super.setUp(); 

    Instrumentation instrumentation = getInstrumentation(); 
    Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(OptionScreen.class.getName(), null, false); 

    StartNewActivity(); // See next paragraph for what this does, probably mostly irrelevant. 
    activity = getActivity(); 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); 
    settings.edit().clear(); 
    settings.edit().commit(); // I am pretty sure this is not necessary but not harmful either. 

StartNewActivity Code:

Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setClassName(instrumentation.getTargetContext(), 
      OptionScreen.class.getName()); 
    instrumentation.startActivitySync(intent); 
    Activity currentActivity = getInstrumentation() 
      .waitForMonitorWithTimeout(monitor, 5); 
    assertTrue(currentActivity != null); 

Cảm ơn!

Trả lời

29

Sự cố là bạn không lưu trình chỉnh sửa ban đầu từ lệnh gọi edit() và bạn tìm nạp phiên bản mới của trình chỉnh sửa và gọi cam kết() mà không thực hiện bất kỳ thay đổi nào đối với trình chỉnh sửa đó. Hãy thử điều này:

Editor editor = settings.edit(); 
editor.clear(); 
editor.commit(); 
+0

Cảm ơn rất nhiều. Wow, tôi thực sự nên đọc tài liệu kỹ lưỡng hơn. Tôi đã không nhận ra tôi đang xây dựng một đối tượng biên tập; Tôi hy vọng rằng tôi đã hoạt động trên các sở thích trực tiếp. –

+4

Ngoài ra điều này sẽ làm việc settings.edit(). Clear(). Cam kết(); – Federico

3

Câu trả lời là ở đây, android unit test: clearing prefs before testing activity

cuộc gọi,

this.getInstrumentation().getTargetContext() 
+0

Có, đó là trong mã tôi trình bày. Có lẽ tôi nên thuật lại câu hỏi bởi vì nó thực sự là "lỗi của tôi ở đâu?" –

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