0

私は新しく作成された android-18 アプリを持ってPreferenceScreenいます。

また、[質問を回答に変換するように修正された]自動テストもあります。

public class MyPreferenceTest extends ActivityUnitTestCase<MyPreference> {  
    Intent intent;
    MyPreference activity;

    public MyPreferenceTest() {
        super(MyPreference.class);
    }

    @Override
    protected void setUp() throws Exception {
        Context targetContext = getInstrumentation().getTargetContext();
        intent = new Intent(targetContext, MyPreference.class);
        super.setUp();
    }

    private void assembleActivity() {
        startActivity(intent, null, null);
        activity = getActivity();
    }

    private void assemblePreferences(String device, String userName, String password) {
        Context targetContext = getInstrumentation().getTargetContext();        
        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(targetContext);
        SharedPreferences.Editor editor = sharedPref.edit();

        editor.putString("smart_phin_bluetooth_devices", device);
        editor.putString("username", userName);  
        editor.putString("password", password);  
        editor.commit();
    }

    public void test_empty_userNames_dont_reflect_into_the_summary() {
        assemblePreferences("", "", ""); 
        assembleActivity();
        activity.onResume();
        EditTextPreference userName = (EditTextPreference) activity.findPreference("username");  // FIXME  userName
        assertEquals("", userName.getEditText().getText().toString());
        assertEquals("", userName.getText());
        assertEquals("Enter your user name", userName.getSummary().toString());
    }

    public void test_full_userNames_reflect_into_the_summary() {
        assemblePreferences("", "BookerT", "");
        assembleActivity();

        activity.onResume();  //  We must call this bc Android does but the test rig does not...
        EditTextPreference userName = (EditTextPreference) activity.findPreference("username");
        assertEquals("username", userName.getKey());

        assertEquals("BookerT", String.valueOf(userName.getText().toString());
//        assertEquals("BookerT", userName.getEditText().getText().toString());
        assertEquals("BookerT", userName.getSummary().toString());
    }

}  // end of class MyPreferenceTest

EditText ビューがまだ何も呼び出されていないため、コメントアウトされたアサーションは失敗します。

このテストでは、onResume() の新しいコードが概要を一般的な言い回しから更新して、設定の現在の値を反映することを確認するようになりました。

4

1 に答える 1

1

テストにバグがあります。

private void assemblePreferences(String device, String userName, String password)

ここでの値の順序はdeviceuserName、であることに注意してくださいpassword

assemblePreferences("BookerT", "", "");

したがって、でdeviceBookerTありませんuserName

于 2013-10-07T21:01:07.763 に答える